在下面的代码中尚未添加的取消注册事件处理程序有什么用?
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;
}
}
答案 0 :(得分:4)
这意味着如果您使用相同的处理程序多次调用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);