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

puf*_*pio 3 .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))
  {
   Console.Write("HOORAY");
  }
 }
}
Run Code Online (Sandbox Code Playgroud)

所以在我的例子中,处理程序在成功提交时返回true.但是我为这个事件分配了两个处理程序......会发生什么?使用第一个处理程序的返回?第二个?都不是?都?

Mar*_*ett 6

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

考虑使用像CancelEventArgs这样的模式,在EventArgs中嵌入返回值.这使得未来的处理程序可以检查和/或更改值.A ref会起作用,因为它会从处理程序传递给处理程序,但是有点意外的IMO:

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

但是,是的 - 在你的例子中,它是最后一个叫做的处理程序:

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

这是保证在该顺序,它们中加入:

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

但是,因为没有处理程序知道它是第一个,中间还是最后一个 - 这对我来说似乎毫无用处.