我不确定这是否可能。
我有许多实现接口(interface) IBar 的不同类,并且具有采用几个值的构造函数。与其创建一堆几乎相同的方法,是否可以有一个通用方法来创建适当的构造函数?
private function GetFoo(Of T)(byval p1, byval p2) as List(Of IBar)
dim list as new List(Of IBar)
dim foo as T
' a loop here for different values of x
foo = new T(x,p1)
list.Add(foo)
' end of loop
return list
end function
我得到:
'New' cannot be used on a type parameter that does not have a 'New' constraint.
最佳答案
不幸的是,.NET 泛型仅允许您将泛型类型约束为具有无参数构造函数,然后您可以使用 New T()
调用它...您不能指定一组特定的参数。
如果您不介意使您的类型可变,您可以创建一个包含具有相关参数的方法的接口(interface),使您的所有类型都实现该接口(interface),然后约束该类型以实现该方法并具有一个无参数构造函数,但它是不理想。
另一种选择是传入适当的 Func
需要x
和 p1
并返回一个新的 T
每一次。这在 C# 中肯定很容易使用 - 在 VB IIRC 中并不那么容易,但仍然值得考虑。
关于vb.net:使用泛型时调用构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5251745/