コンテキスト: これは、将来のユーザーがエンジン自体の内部動作に関係なく動作の特定の部分を拡張できるように、汎用クラスでいっぱいのエンジン用です。
今、クラス C が必要です。
public class C
{
public C Copy(params) { ... }
}
しかし、拡張クラス D:
public class D : C
{
public D Copy(params) { ... }
}
基本的にはいくつかのジェネリック クラスがありますが、適切な型を返すコピー メソッド (実際には「新しい場所にコピーを作成する」メソッドですが、重要ではありません) が必要です。
public class SampleClass<T>
where T : C
{
public void Stuff()
{
...
T copy = favoriteThing.Copy(params);
...
}
}
キャストして、将来の実装者がそれを正しくすることを信頼することもできますが、契約ですべてを明示することをお勧めします。これを行うエレガントな方法はありますか?