2014-04-04 3 views
1

호출 방법의 모든 결과를 얻을 방법 :내가 아주 간단한 위임이

public delegate int Compute(int i, int j); 

및 일부 기능 :

static int sum(int x, int y) 
{ 
    return x + y; 
} 

static int diff(int x, int y) 
{ 
    return x - y; 
} 

static int times(int x, int y) 
{ 
    return x * y; 
} 

그럼 난 같은 이벤트를 선언하고있다 :

public static event Compute e; 

에서을 main 이벤트에 함수를 추가하고 있습니다 :

e += new Compute(sum); 
    e += new Compute(diff); 
    e += new Compute(times); 

그리고 마지막으로 내가 그렇게, 기능의 모든 결과를 쓰고 싶습니다은 :

Console.WriteLine(e.Invoke(3,4)); 

나는 Invoke 방법은 이벤트의 모든 기능을 호출하는 알 수있는 바와 같이. 하지만 제 경우에는 마지막으로 추가 된 함수의 결과 만 보입니다 - 그래서 12. Invoke 방법의 모든 결과를 얻으려면 어떻게해야합니까?

함수가 어떤 유형도 반환하지 않으면 (void 유형 임) 아무런 문제가 없지만 함수가 뭔가를 반환하면 - 있습니다.

+2

이것은 약간 [xy problemy] (http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem)이 문제로 실제로 해결하려고합니까? – asawyer

답변

5

당신은 당신이 한 번에 하나의 핸들러를 호출 할 수있는 MulticastDelegate.GetInvocationList를 호출해야합니다 : 그것은 디자인입니다

// TODO: Don't call your event e, and use Func<int, int, int> 
foreach (Compute compute in e.GetInvocationList()) 
{ 
    int result = compute(3, 4); 
    Console.WriteLine("{0} returned {1}", compute.Method.Name, result); 
} 
0

. 모든 결과를 얻으려면 GetInvokationList() 메서드를 사용하여 대리자 목록을 가져온 다음 목록별로 반복하고 모든 대리자를 호출해야합니다.

관련 문제