c# - 取消订阅从未订阅过的事件是否安全?

标签 c# .net events subscribe unsubscribe

例如,如果这些代码:

        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/

相关文章:

.NET 与 Honeywell D6X00 Platform SDK 集成(用于个人数字助理 - Dolphin 6500 移动数据终端应用程序开发)

c# - CFind 在研究级别失败 - 不支持 SOP 类或找不到抽象语法的可接受表示上下文

c# - 包装字符串的 WeakReference 会导致奇怪的行为

c# - 为什么 FileShare.ReadWrite 在这种情况下不起作用?

.net - 插件向后兼容性

javascript - 如何检测 Internet Explorer 10+ 中的点击次数

c# - 如何给每个本地用户一个唯一的ID? C#

.net - 数据读取器仍然比数据集更快吗?

javascript - 哪些 JavaScript 对象的原型(prototype)中有 addEventlistener?

qt - QGraphicsView 和 eventFilter