我的代表非常简单:
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;
主要是我在向事件添加功能:
e += new Compute(sum);
e += new Compute(diff);
e += new Compute(times);
最后我想写下函数的所有结果,所以:
Console.WriteLine(e.Invoke(3,4));
据我所知,Invoke
方法正在调用事件中的所有函数。但在我的情况下,我只看到最后添加的函数的结果 - 所以12
。如何获得Invoke
方法的所有结果?
如果函数没有返回任何类型(它们是void类型)没有问题,但是如果函数返回了某些东西 - 那就是。
答案 0 :(得分: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);
}
答案 1 :(得分:0)
这是设计的。如果要获得所有结果,必须使用GetInvokationList()方法获取委托列表,然后按列表迭代并调用所有委托。