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