次のようにいくつかのクラスを作成しました。
abstract class TestBase<T, TThis> where TThis : TestBase<T, TThis>, new()
{
public T Thing { get; set; }
public static TThis CreateNew(T t)
{
return new TThis {Thing = t};
}
}
abstract class MiddleClass : TestBase<string, MiddleClass>
{
public abstract void DoSomething();
}
class RealClass : MiddleClass
{
public override void DoSomething()
{
// do something
}
}
...
var mc = RealClass.CreateNew("Hello world");
mc.DoSomething();
ご覧のとおり、このパターンを使用して、呼び出されCreateNew()
たサブクラスの型を返す静的メソッドの一種の継承をシミュレートできます。TestBase
から派生する具体的なクラスに最適ですTestBase
。
問題は、この特定のケースでは抽象的であるためコンパイルされないため、制約MiddleClass
を満たすためのパラメーターなしのコンストラクターがないことです。new()
MiddleClass
コンクリートを作る以外に、これに対する回避策を考えられますか?