这样使用EventHandler的意义是什么?
本文关键字:是什么 EventHandler | 更新日期: 2023-09-27 18:07:05
取消注册尚未在下面的代码中添加的事件处理程序的用途是什么?
public class foo
{
private event EventHandler<boo> booCompleted;
public RegisterBooCompletedHandler(EventHandler<boo> newBooCompletedEventHandler, bool forceUnregisterOtherEventHandlers)
{
if (forceUnregisterOtherEventHandlers)
booCompleted = null
booCompleted -= newBooCompletedEventHandler; // <- why do we unregister not added yet event handler?
booCompleted += newBooCompletedEventHandler;
}
}
这意味着如果您使用同一个处理程序多次调用RegisterBooCompletedHandler(handler)
,您仍然只为该处理程序订阅一次事件
我的猜测是实际上你已经看到过这个,因为有人解决了一个问题,他们真的在错误的地方订阅了事件,所以订阅了多次…但我敢肯定,在一些的情况下,很难知道你是否已经订阅了,只是让它(几乎)不需要再次订阅是方便的。
我说它是"(几乎)无操作",因为它改变了顺序。考虑:
// After this call, invocation list is A
RegisterBooCompletedHandler(A, false);
// After this call, invocation list is A, B
RegisterBooCompletedHandler(B, false);
// After this call, invocation list is A, B, C
RegisterBooCompletedHandler(C, false);
// After this call, invocation list is A, C, B
RegisterBooCompletedHandler(B, false);