这样使用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;
    }
}

这样使用EventHandler的意义是什么?

这意味着如果您使用同一个处理程序多次调用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);