1
我有一個包含另一個基類(例如:ClassA)的列表的基類(例如:Class1)。包含第二個基類的子類的列表的第一個基類(例如:Class1AA,Class1AB,..)的每個子類(例如:ClassAA,ClassAB,...)覆蓋「基類列表」屬性並返回「子類列表」
客戶端永遠不會知道哪個子類正在使用,那麼我不認爲我可以使用泛型爲我的基類。
我嘗試這樣的事情,還有更多,但我總是收到錯誤..
Imports System.Collections.Generic
Public Class Client
Public Sub DoAction(obj as Class1)
For Each item as ClassA in obj.ItemList
...
Next
End Sub
End Class
Public MustInherit Class Class1
Public MustOverride ReadOnly Property ItemList() As IList(Of ClassA)
End Class
Public Class Class1AA
Inherits Class1
Public Overrides ReadOnly Property ItemList() As IList(Of ClassA)
Get
Return New List(Of ClassAA)
End Get
End Property
End Class
Public Class Class1AB
Inherits Class1
Public Overrides ReadOnly Property ItemList() As IList(Of ClassA)
Get
Return New List(Of ClassAB)
End Get
End Property
End Class
Public Class ClassA
End Class
Public Class ClassAA
Inherits ClassA
End Class
Public Class ClassAB
Inherits ClassA
End Class
感謝您的幫助
我認爲你的意思是「返回值協方差」 – JaredPar 2010-10-19 15:02:33
@Jared:否 - 返回值協方差還涉及委託類型的兼容性,VB *有* this。我的意思是泛型類型的協變性。我認爲這被稱爲「通用協方差」。據全能谷歌稱,至少我不是唯一一個這樣使用它的人。 ;-) – 2010-10-19 15:05:40
@Konrad它看起來像OP要求讓子屬性返回List(Of Child)而不是List(父)(在C++中是合法的)。我認爲這被稱爲「返回值協方差」 – JaredPar 2010-10-19 15:07:59