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

例如,如果这些代码:

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

执行之前:

  button1.Click += button1_Clicked; 

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

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

我找不到特定于事件的引用,但它记录了事件使用的基础函数 , Delegate.Remove

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

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

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