我已經閱讀了一些其他相關的問題,但仍不能完全弄清楚如何做我們需要做的事情。使用泛型不是必須的,但似乎是我們可能獲得我們所需的唯一途徑。我們在.net 3.5中,所以我們不能使用我認爲相關的新.net 4.0的東西。假設我們有一個具有一些屬性和方法的基類Parent。我們還有一個ParentCollection,它目前實現了IEnumerable。我們還在這個類中添加了其他屬性和方法。泛型和繼承與集合
我們現在需要從Parent繼承來創建ChildA。但是我們也需要繼承ParentCollection來創建ChildACollection。然後,我們會將ChildA的同伴班作爲ChildB和ChildBCollection。
ChildACollection和ChildBCollection及其項目是唯一實際實例化的東西。父母的東西是抽象的。
ParentCollection上的方法以及Parent可以返回符合條件且可能已被操作的項目的子集。
問題是因爲這些方法正在處理集合中的項目,所以我們希望集合返回爲後代的類型。例如調用通過ChildACollection的實例在ParentCollection中定義的SomeMethod(),以便子集返回類型爲List而不是List。
有沒有辦法實現這種功能?
例僞我們正在嘗試做
public class Parent
{
public string PropA { get; set; }
public int PropB { get; set; }
public void DoSomething() { }
}
public class ParentCollection : IEnumerable<Parent>
{
protected List<Parent> _list = new List<Parent>();
public IEnumerator<Parent> GetEnumerator()
{
return _list.GetEnumerator();
}
System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()
{
return GetEnumerator();
}
public List<Parent> SomeSelectMethod()
{
List<Parent> list = new List<Parent>();
// DO LOGIC HERE TO DETERMINE WHAT ITEMS WILL BE IN LIST
return list;
}
}
public class ChildA : Parent
{
public double PropC { get; set; }
public void DoSomethingElse() { }
}
public class ChildACollection : ParentCollection
{
public void SomeChildMethod() { }
}
public class MyTestClass
{
public void Main()
{
ChildACollection myCollection = new ChildACollection();
//HERE IS THE PROBLEM
List<ChildA> childList = myCollection.SomeSelectMethod();
}
}
什麼基本上,我想利用的傳承,但不能使ChildACollection的用戶代碼必須不斷地投對象參考列表返回到ChildA對象。我的意思是內部列表將有實際的ChildA對象,而不是Parent對象,但由於該方法在ParentCollection類中,它只知道它是Parent或後代類的對象。希望這是有道理的。
幫助?
跟進問題: 我需要深深這個層次結構1倍以上的水平(孫子),增加添加方法的家長,將創建和approprate對象類型添加到列表中,也就是說,如果添加是調用ChildCollection引用時,它應該創建並添加一個Child類型,並返回對該列表中新創建的對象的引用。 Possilbe?
受保護的列表 _list = new List (); 你知道你已經繼承自IEnumerable ,這實際上是一個列表,所以你不需要一個_list元素成爲類的一部分。 –
2011-03-23 15:59:44