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