我有一个抽象类,其抽象方法采用实现类类型的参数。我可以通过这样的泛型来实现这一点:
abstract class Clazz<T>
{
public abstract void CopyFrom(Clazz<T> source);
}
class MyClass : Clazz<MyClass>
{
public override void CopyFrom(Clazz<MyClass>)
{
// implementation
}
}
不幸的是,我在其中一个实现类中需要一个Clazz<T>
元素列表。那么我该如何实现呢?
- 原因
List<Clazz<T>>
不起作用。 List<Clazz<MyClass>>
太严格了。- 删除泛型和抽象方法确实有效(我当前的解决方案),但这样我可能会忘记
CopyFrom()
在其中一个实现类中实现该方法。
编辑:这里有一个更详细的例子: 我有一个抽象类:
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
.