gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 08:20:43 26 4
gpt4 key购买 nike

如果我有一个处理程序返回 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。但我为事件分配了两个处理程序......会发生什么?使用第一个处理程序的返回?第二个?两者都不?两个都?

最佳答案

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

考虑使用像 CancelEventArgs 这样的模式在 EventArgs 中嵌入返回值的位置。这让 future 的处理程序检查和/或更改值。 A ref会一样工作,因为它是 passed from handler to handler ,但有点出乎 IMO 的意料:

When the signature includes a parameter that is passed by reference, the final value of the parameter is the result of every method in the invocation list executing sequentially and updating the parameter's value.



但是,是的 - 在你的例子中,它是 last handler called :

When the signature of the methods invoked by a delegate includes a return value, the delegate returns the return value of the last element in the invocation list.



这是 guaranteed to be in the order他们被添加:

the result of the [addition] operation is a new delegate instance that, when invoked, invokes the first operand and then invokes the second operand



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

关于.Net 每个返回值的事件有多个事件处理程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/842122/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com