【发布时间】:2013-08-10 04:54:00
【问题描述】:
这里我们有一个简单的类层次结构,并使用具有type constraint 的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 的所有派生(此时可以实例化)确实有一个公共的无参数构造函数。
这对编译器来说理论上可行吗?
【问题讨论】:
-
比起无参数构造函数子句,更让我担心的是这一行
non-abstract type
标签: c# generics abstract-class base-class