14

例如,如果这些代码:

        Button button1 = new Button();
        // ...
        button1.Click -= button1_Clicked;

之前执行:

        button1.Click += button1_Clicked;

我没有发现错误或异常,但我想知道这里是否有任何缺点。

如果是安全的,为什么允许取消订阅从未订阅过的事件?

4

1 回答 1

16

我找不到特定于事件的参考,但它记录了事件使用的基础函数Delegate.Remove

如果 value 为 null 或在 source 的调用列表中找不到 value 的调用列表,则返回 source

所以至少对于使用隐式访问器的事件是安全的。

自定义访问器是另一个蜡球,因为您可以根据需要实现remove块。我会假设人们会模仿隐含的行为,但这不是强制的。

于 2014-09-05T03:35:48.440 回答