我有一个实用程序类,它将通用列表作为参数。
代码如下:
Function DoStuff(collection as Object, elt as Object)
...
collection.Add(elt)
...
End Function
这称为:
DoStuff( List(Of Foo), new Foo() )
DoStuff( List(Of Bar), new Bar() )
大约有十几种不同的类型。
目前,作为Object传递会产生一个后期绑定分辨率警告,尽管它运行正常。
我尝试了不同的方法来传递集合和elt(Foo和Bar都扩展了一个基类)但似乎无法找出“正确”的方法。
想法?
答案 0 :(得分:7)
我认为你正在寻找类似的东西。
Public Sub DoStuff(Of T)(collection As List(Of T), elt As T)
...
collection.Add(elt)
...
End Function
答案 1 :(得分:3)
womp和Qua的答案我认为是正确的,但是如果你的12种类型都继承自一些常见的基类(正如你的原始问题所示)你可以编写方法使它适用于你的类型,并且只有你的类型如下:
Public Sub DoStuff(Of T As YourBaseClass)(collection As List(Of T), elt As T)
...
collection.Add(elt)
...
End Sub
这种方法仅适用于继承自YourBaseClass
。
答案 2 :(得分:1)
您应该始终努力构建/使用强类型代码。想象一下,如果整数作为集合对象传递会发生什么 - 您必须手动检查变量的类型。更糟糕的是,您的方法的用户必须在文档中查找您的方法所需的对象,因为它是第一个参数。
你应该采用 womp 建议的方法,或者更好的是你应该让你的参数需要一个扩展泛型集合接口的对象,ICollection(Of T):
Public Function DoStuff(Of T)(collection As ICollection(Of T), elt As T) As stuff
...
collection.Add(elt)
...
End Function
因为这将允许方法的用户不仅传递列表,而且还传递继承ICollection(Of T)接口(synchronizedCollection,HashSet,LinkedList或自定义类等)的所有其他类,这实际上是权力OO编程。