ここでは、単純なクラスの階層構造と、次の型制約を持つジェネリックの使用があります。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
(この時点でインスタンス化できる) のすべての派生物がパブリックのパラメーターなしのコンストラクターを持っていることをコンパイラーが理解することを望んでいました。
これはコンパイラにとって理論的に可能でしょうか?