这里我们有一个简单的类层次结构,并使用具有类型约束的泛型new()
public abstract class Base
{
}
public class Derived : Base
{
}
public class TestClass
{
private void DoSomething<T>(T arg) where T : new()
{
}
public void TestMethod()
{
Derived d1 = new Derived();
DoSomething(d1); // compiles
Base d2 = new Derived();
DoSomething(d2); // compile error
}
}
该代码无法在指示的行编译,并出现以下错误:
'Base' 必须是具有公共无参数构造函数的非抽象类型,才能将其用作泛型类型或方法 'Foo.DoSomething(T)' 中的参数 'T'
这个错误很清楚也很有意义,但我希望编译器能够理解Base
(此时可以实例化的)的所有派生都有一个公共的无参数构造函数。
这在理论上对编译器来说是可能的吗?