実装クラスの型のパラメーターを取る抽象メソッドを持つ抽象クラスを取得しました。次のようなジェネリックによってこれを実現できます。
abstract class Clazz<T>
{
public abstract void CopyFrom(Clazz<T> source);
}
class MyClass : Clazz<MyClass>
{
public override void CopyFrom(Clazz<MyClass>)
{
// implementation
}
}
残念ながら、実装クラスの 1 つにClazz<T>
要素のリストが必要です。では、どうすればこれを達成できますか?
- 原因
List<Clazz<T>>
は機能しません。 List<Clazz<MyClass>>
制限しすぎです。CopyFrom()
ジェネリックと抽象メソッドを削除しても機能します (私の現在の解決策) が、この方法では、実装クラスの 1 つでメソッドを実装するのを忘れる可能性があります。
編集:ここに、より詳細な例があります: 私は抽象クラスを持っています:
abstract class Clazz<T>
{
public abstract void CopyFrom(Clazz<T> source);
// ...
}
そして派生クラス:
class MyDerivedClass : Clazz<MyDerivedClass >
{
public string Text;
private readonly List<MySubClass> _list = new List<MySubClass>();
public override void CopyFrom(MyDerivedClass source)
{
Text = source.Text;
}
private List<Clazz> GetAllItems()
{
List<Clazz> list = new List<Clazz>();
list.Add(this);
list.AddRange(_list);
}
private class MySubClass : Clazz<MySubClass>
{
public int Number;
public override void CopyFrom(MySubClass source)
{
Number = source.Number;
}
}
}
他にもいくつかの派生クラスがあり、GetAllItems()
メソッドは でのみ必要ですMyDerivedClass
。