2013-12-23 75 views
0

最有可能是比我在標題中的建議更好的方法來解決這個問題。這裏是問題:創建一個從抽象父類繼承的不同類型集合

abstract class BaseClass 
{ 
     abstract public void DoSomething(); 
} 

class ChildClass : BaseClass 
{ 
     public override DoSomething(); 
} 

class OtherClass 
{ 
    //Here is what I want to do for two elements 
     ChildClass foo = new ChildClass(); 
     SomeOtherChildClass bar = new SomeOtherChildClass(); 
     foo.DoSomething(); 
     bar.DoSomething(); 
} 

我想爲更多的元素做到這一點。我不想讓自己的變量,我不想爲每個子類創建單獨的列表。只要繼承BaseClass並具有DoSomething(),我實際上並不想知道哪些子類存在。所以我可以做這樣的事情:myColelction.ForEach(i => i.DoSomething());到

我想我需要一些相當寬鬆的集合。我想到了新元素的IEnumable和Concatting,但是當BaseClass是抽象時,你當然不能這麼做。

替代方案(我能想到)是使用事件。但是可能有多個OtherClass實例,我不想觸發我不應該做的事情。也許我錯了,但我對事件瞭解不多。

回答

2

您只需要一個基類的列表,例如

List<BaseClass> myCollection 

例如,你可以做

myCollection.Add(new ChildClass()); 
myCollection.Add(new SecondChildClass()); 

,您可以

myCollection.Foreach(i => i.DoSomething());