我有一个基类(例如:Class1),其中包含另一个基类的列表(例如:ClassA)。第一个基类的每个子类(例如: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
感谢您的帮助
答案 0 :(得分:1)
此代码需要VB中不存在的通用协方差。
基本上List(Of Base)
和List(Of Derived)
之间没有任何关系。否则,可以编写以下代码:
Dim a As New List(Of Base)()
a.Add(New Base())
Dim b As List(Of Derived) = a
''// Can’t work: b(0) doesn’t contain a `Derived` instance!
Dim x As Derived = b(0)
但是,您只需在任何地方返回List(Of ClassA)
并将派生对象放入该列表中。