例如,如果这些代码:
Button button1 = new Button();
// ...
button1.Click -= button1_Clicked;
执行之前:
button1.Click += button1_Clicked;
我没有发现任何错误或异常,但我想知道这里是否有任何缺点。
如果是安全的,为什么允许取消订阅从未订阅过的事件?
最佳答案
我找不到特定于事件的引用,但它记录在 underlying function 中事件使用,Delegate.Remove
:
Returns source if value is null or if the invocation list of value is not found within the invocation list of source
因此至少对于使用隐式访问器的事件来说是安全的。
自定义访问器完全是另一回事,因为您可以根据需要实现 remove
block 。我假设人们会模仿隐式行为,但这不是强制执行的。
关于c# - 取消订阅从未订阅过的事件是否安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25678172/