.Net每个返回值的事件都有多个事件处理程序

.Net每个返回值的事件都有多个事件处理程序,.net,event-handling,.net,Event Handling,如果我有一个事件,其处理程序返回bool,如果我附加多个事件会发生什么 看这个例子 public class MyClass { public delegate bool MyEventHandler(object sender, EventArgs e); public event MyEventHandler Submit; public void DoSubmissions() { if (Submit != null && Submit(this, null

如果我有一个事件,其处理程序返回bool,如果我附加多个事件会发生什么

看这个例子

public class MyClass
{
 public delegate bool MyEventHandler(object sender, EventArgs e);
 public event MyEventHandler Submit;

 public void DoSubmissions()
 {
  if (Submit != null && Submit(this, null))
  {
   Console.Write("HOORAY");
  }
 }
}

因此,在我的示例中,处理程序在成功提交时返回true。但是我给事件分配了两个处理程序…会发生什么?是否使用第一个处理程序的返回?二号?也不两者都使用?

最后要注册的事件的返回值。

一般来说,这是一个糟糕的设计

考虑使用类似于在EventArgs中嵌入返回值的模式。它允许将来的处理程序检查和/或更改值。
ref
的工作原理是一样的,但在我看来有点出乎意料:

当签名包含通过引用传递的参数时,参数的最终值是调用列表中每个方法顺序执行并更新参数值的结果

但是,是的,在你的例子中,它是:

当委托调用的方法的签名包含返回值时,委托将返回调用列表中最后一个元素的返回值

也就是说,它们被添加到:

[addition]操作的结果是一个新的委托实例,该实例在调用时调用第一个操作数,然后调用第二个操作数

但是,因为没有人知道它是第一个、中间还是最后一个,所以对我来说似乎没用