2013-12-23 51 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());