例如,如果这些代码:
Button button1 = new Button();
// ...
button1.Click -= button1_Clicked;
之前执行:
button1.Click += button1_Clicked;
我发现没有错误或异常,但我想知道这里是否有任何缺点。
如果它是安全的,为什么可以取消订阅从未订阅过的活动?
答案 0 :(得分:11)
我找不到特定于事件的引用,但会记录事件使用的underlying function Delegate.Remove
:
如果value为null或者在源的调用列表中找不到值的调用列表,则返回source
因此,至少对于使用隐式访问器的事件来说,它是安全的。
自定义访问器是另一个蜡球,因为你可以根据需要实现remove
块。我认为人们会模仿隐含行为,但这并没有强制执行。