覆盖“基类列表”属性并返回“子类列表”

时间:2010-10-19 14:44:12

标签: .net vb.net override

我有一个基类(例如: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

感谢您的帮助

1 个答案:

答案 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)并将派生对象放入该列表中。