如果有下面的类:
class A
{
public A(int number)
{
}
}
那么为什么我不能有这样一个泛型类:
class B<ParameterClass> where ParameterClass : A
{
public B()
{
ParameterClass a = new ParameterClass(1);
}
}
我得到一个 CS0304,编译器说我没有 new() 限制,但我只想调用在 A 上定义的构造函数,因为 ParameterClass 始终是 A,编译器可以确保 A( int number) 构造函数将始终存在。我只是不明白为什么会有这个限制。
最佳答案
仅仅因为构造函数是在 A
上声明的,并不意味着它将在 ParameterClass
上声明。例如:
public class Bad : A
{
public Bad(string x) : base(x.Length)
{
}
}
现在我使用:
var b = new B<Bad>();
您希望它做什么?按照您编写它的方式,如果它是有效,我希望它会尝试调用 new Bad(1)
,这肯定是无效的。
关于c# - 如果我指定了基类,为什么我不能用泛型调用参数化构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14838964/