取消订阅从未订阅过的活动是否安全?

时间:2014-09-05 03:21:18

标签: c# .net events subscribe unsubscribe

例如,如果这些代码:

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

之前执行:

        button1.Click += button1_Clicked;

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

如果它是安全的,为什么可以取消订阅从未订阅过的活动?

1 个答案:

答案 0 :(得分:11)

我找不到特定于事件的引用,但会记录事件使用的underlying function Delegate.Remove

  

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

因此,至少对于使用隐式访问器的事件来说,它是安全的。

自定义访问器是另一个蜡球,因为你可以根据需要实现remove块。我认为人们会模仿隐含行为,但这并没有强制执行。