我有一個抽象類,抽象類採用實現類的類型參數。我可以通過這樣的泛型實現這一點:如何使用實現類的參數創建抽象方法
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
需要。
你需要哪個清單?作爲抽象方法的參數,還是僅僅作爲派生類中的字段/屬性? – 2013-03-08 12:08:03
請你能解釋爲什麼'List>'太嚴格了嗎? –
qujck
2013-03-08 12:09:36
'List>'因爲我需要用不同類型的元素填充它,所有元素都來自'Clazz '',所以限制性太強。 –
Tarkil
2013-03-08 12:19:35