2015-02-09 67 views
1

我有一個名爲dRow的類包含一些數據。我有很多dRow,AccountRow,PageRow等的子類,它們只在代碼中有所不同。現在我想添加一個單獨的dRow ...單身人士對象和小類

Protected Shared EmptyRow as dRow 

EmptyRow是一個dRow的實例,它不包含任何數據。正下方是這...

Public Function EmptyRow() as dRow... 

現在的問題...我需要AccountRow返回EmptyRow作爲AccountRow,而不是卓爾......

Friend Function EmptyRow() as AccountRow... 

DirectCast將無法正常工作,這是錯的方向。它看起來像我必須有一個單獨的EmptyRow爲每個子類?

有什麼辦法可以避免這種命運嗎?

+0

正確的; 'EmptyRow'不能有兩個不相關的類型。 – SLaks 2015-02-09 21:31:42

回答

1

泛型可能工作。您是在創建dRow的實例,還是僅將它用作基類?如果它只是一個基類(可能有MustInherit關鍵字),然後再嘗試這樣的事:

MustInherit Class dRow(Of T As New) 
    Protected Shared _emptyRow As New T 

    Public Shared Function EmptyRow() As T 
     Return _emptyRow 
    End Function 

End Class 

Class AccountRow 
    Inherits dRow(Of AccountRow) 

End Class 

Class PageRow 
    Inherits dRow(Of PageRow) 

End Class 

EmptyRow函數將返回現在的子類型的單一實例。

您甚至可以添加像這樣的其他通用類型約束來確保子類僅使用dRow的實例作爲它們的類型。

MustInherit Class dRow(Of T As {dRow(Of T), New}) 

https://msdn.microsoft.com/en-us/library/w256ka79.aspx

+0

啊哈!這看起來像一個解決方案。我以前從來沒有使用過泛型,我會給它一個旋轉! – 2015-02-09 23:34:09

+0

這是一種有趣的泛型使用,但它們可以非常強大。 – CoderDennis 2015-02-09 23:35:35