如何创建通用的泛型列表?

时间:2017-08-17 11:56:09

标签: .net vb.net generics

请参阅下面的代码,我正在尝试创建一个使用泛型的接口列表,但我需要通用版本。因此,您知道,通用类型可能因列表中的每个条目而不同,它不会只是具有相同泛型类型的IFoo列表。

如果您需要澄清,请告诉我。

Public Interface IFoo

End Interface

Public Interface IFoo(Of T)
    Inherits IFoo

    Function Bar(foo As T) As T

End Interface

Public Class Foo(Of T)
    Implements IFoo(Of T)

    Private ReadOnly Foos As List(Of IFoo)

    Public Function Bar(foo As T) As T Implements IFoo(Of T).Bar
        For Each i In Foos
            ' Can't call Bar function from IFoo(Of T) as IFoo does not define the Bar function. 
        Next
    End Function
End Class

1 个答案:

答案 0 :(得分:1)

关于泛型类型,您需要了解的是IFoo(Of String)类型的对象与IFoo(Of Integer)完全不同的类型,它们几乎没有任何共同之处实际上。

如果IFoo(Of T)继承自IFoo,那么他们唯一的共同点就是IFoo

因此,如果您尝试运行循环并调用一个共同的方法,那么必须将该方法放在IFoo中。

此外,即使您可以这样做,您将如何管理参数?

 For Each i In Foos
      'Let's say you can call it from here
      Dim Myparam As ??? 'What type is your param then ?
      i.Bar(of <What do you put here ?>)(Myparam)
 Next