例如,如果这些代码:
Button button1 = new Button();
// ...
button1.Click -= button1_Clicked;
之前执行:
button1.Click += button1_Clicked;
我没有发现错误或异常,但我想知道这里是否有任何缺点。
如果是安全的,为什么允许取消订阅从未订阅过的事件?
例如,如果这些代码:
Button button1 = new Button();
// ...
button1.Click -= button1_Clicked;
之前执行:
button1.Click += button1_Clicked;
我没有发现错误或异常,但我想知道这里是否有任何缺点。
如果是安全的,为什么允许取消订阅从未订阅过的事件?
我找不到特定于事件的参考,但它记录了事件使用的基础函数,Delegate.Remove
:
如果 value 为 null 或在 source 的调用列表中找不到 value 的调用列表,则返回 source
所以至少对于使用隐式访问器的事件是安全的。
自定义访问器是另一个蜡球,因为您可以根据需要实现remove
块。我会假设人们会模仿隐含的行为,但这不是强制的。