0
我有一個通用集合,其中包含集合中的項目需要調用的方法。每個項目都有對通用集合的引用。問題是我不能使用每個項目的類型作爲傳遞給泛型集合的類型。如何在抽象類(C#)的泛型集合中使用派生類型?
的想法是這樣的(我知道這並不編譯):
public class MyCollection<T>
{
public void Call(T item) { ... }
}
public abstract class MyItemBase
{
protected MyCollection<typeof(this)> _collection;
public MyItem(MyCollection<typeof(this)> collection)
{
this._collection = collection;
}
public DoSomething()
{
this._collection.Call(this);
}
}
public class MyItem : MyItemBase
{
}
很顯然,你不能聲明MyCollection<typeof(this)>
但我覺得寫這樣說你得到的總體思路我正在嘗試做什麼。本質上,我想抽象類的參考收集到意味着MyCollection<MyClass>
。
有什麼辦法可以使這項工作?
我把它編輯以正確的代碼,現在。 – Zasz
將集合傳遞給Item似乎很奇怪,因爲您可能會將該項目放在另一個列表中,然後反向引用現在無效。 – Zasz
這就是爲什麼我使用泛型,以便反向引用遵循同樣的合同。我使用MVVM模式,集合有幾個屬性被填充一次,然後被所有子視圖模型使用。因此,將集合的引用傳遞給每個視圖模型的構造函數似乎是正確的,以便它可以訪問更大的範圍。也許我應該從集合中分離公共屬性,並將它們作爲單獨的引用傳遞給視圖模型? – Opus4210