2012-02-14 34 views
0

可以说我有一个通用的接口(VB.NET):如何使用泛型列表是发生在派生类实现一个共同的接口

Public Interface IBase(Of T As {IBase(Of T)}) 
    Property Parent() As T 

我有2类,实现接口

Public Class Derive1 
    Implements IBase(Of Derive1) 
    Public Property Parent() As Derive1 Implements IBase(Of Derive1).Parent 

Public Class Derive2 
    Implements IBase(Of Derive2) 
    Public Property Parent() As Derive2 Implements IBase(Of Derive2).Parent 

如何使用泛型列表,可以同时接受Derive1和Derive2这样的:

genList.Add(Derive1) 
genList.Add(Derive2) 
+2

什么是IBASE和IBasicPortfolio之间的关系? – CodeThug 2012-02-14 03:33:54

+0

对不起,代码示例中存在拼写错误。 IBase是派生类实现的通用接口。我已经更新了示例代码。 – user1208214 2012-02-14 06:33:04

回答

0

麦e Derive1和Derive2实现通用接口,然后创建该接口的列表。例如,假设您要迭代通用列表并使用CountChildren等方法,您可以在该列表中的Derive1和Derive2对象上执行该方法。首先,你要创建一个接口,这样的:

Public Interface ICalculations 
    Function CountChildren() As Integer 
End Interface

然后,你要建立Derive1和Derive2让他们实现这个接口。下面是可能的样子:

Public Class Derive1 
    Implements IBasicPortfolio(Of Derive1) 
    Implements ICalculations 
    Public Property Value() As Integer 
     Get 
      Return m_Value 
     End Get 
     Set 
      m_Value = Value 
     End Set 
    End Property 
    Private m_Value As Integer 
    Public Property [Next]() As Derive1 
     Get 
      Return m_Next 
     End Get 
     Set 
      m_Next = Value 
     End Set 
    End Property 
    Private m_Next As Derive1 
    Public Function CountChildren() As Integer 
     Return 1 + [Next].CountChildren() 
    End Function 
End Class 

Public Class Derive2 
    Implements IBasicPortfolio(Of Derive2) 
    Implements ICalculations 
    Public Property Value() As Integer 
     Get 
      Return m_Value 
     End Get 
     Set 
      m_Value = Value 
     End Set 
    End Property 
    Private m_Value As Integer 
    Public Property [Next]() As Derive1 
     Get 
      Return m_Next 
     End Get 
     Set 
      m_Next = Value 
     End Set 
    End Property 
    Private m_Next As Derive1 
    Public Function CountChildren() As Integer 
     Return 1 + [Next].CountChildren() 
    End Function 
End Class

然后您可以创建ICalculations的列表,它可以同时包含Derive1和Derive2对象:

Dim foo = New List(Of ICalculations)() 

foo.Add(New Derive1()) 
foo.Add(New Derive2()) 

For Each bar As var In foo 
    bar.CountChildren() 
Next