2013-09-18 5 views
1

현재 작업을 사용하여 일부 메서드 호출을 문자열로 추가하고 있습니다. 아래처럼 :작업을 사용하여 개체 만들기 목록

var MyAction = new List<Action>(); 

MyAction.Add(() => this.FunctionA(new string[] { "All" })); 
MyAction.Add(() => this.FunctionB(new string[] {"All"})); 
MyAction.Add(() => this.FunctionC(new string[] {"-null-"})); 

일부 런타임 처리를 수행하는이 작업을 반복 :

foreach (var action in LoadDSAction) 
{ 
    action(); 
} 

그러나 지금은 동일한 방법을 사용하여 몇 객체 생성 문을 호출해야합니다. 예컨대 : 나는 더 반복 할 수 있도록

ClssA objA = new ClsA(); 
ClssB objB = new ClsB(); 
ClssC objC = new ClsC(); 

어떻게 행동에 이러한 추가?

답변

0

의도가있는 경우 Action 대신 일부 데이터를 반환하는 delegate를 사용해야합니다. 예 : Func<object> :

var factories = new List<Func<object>>(); 
factories.Add(() => new ClsA()); 
factories.Add(() => new ClsB()); 
factories.Add(() => new ClsC()); 

그런 다음 당신은 루프에서 개체를 만들 수 있습니다 : CLSA, ClsB, CLSC 몇 가지 기본 유형을 상속하는 경우

foreach(var factory in factories) 
{ 
    var obj = factory(); 
    // 
} 

, 당신은 Func을 제네릭 형식 매개 변수로 유형을 사용할 수 있습니다.

+1

감사합니다. 그것은 나를 위해 일했습니다. – user2519971

0

하지 생성자의 출력에 의해 입증 된 바와 같이 다음

MyAction.Add(() => new ClssA("One")); 
MyAction.Add(() => new ClssA("Two")); 
MyAction.Add(() => new ClssA("Three")); 

foreach (var action in MyAction) 
{ 
    action(); 
} 

이 클래스를 인스턴스화겠습니까 당신이 달성하기 위해 노력하고 있지만 같은 패턴은 확실히 즉

public class ClssA{ 
    private string id; 
    public ClssA(string id) 
{ 
    this.id = id; 
    System.Console.WriteLine("I'm {0}", id); 
} 

를 작동 정확히 확인 :

I'm One 
I'm Two 
I'm Three