执行后清除C#事件?

Ala*_*lan 5 c# events

说我有以下代码:

public event EventHandler DatabaseInitialized = delegate {};

//a intederminant amount of subscribers have subscribed to this event...


// sometime later fire the event, then create a new event handler...
DatabaseInitialized(null,EventArgs.Empty);

//THIS LINE IS IN QUESTION    
DatabaseInitialized = delegate {};
Run Code Online (Sandbox Code Playgroud)

这会清除订阅者,用新的空默认值替换它吗?并且,该事件会在被清除之前通知所有订户吗?IE有竞争条件的机会吗?

Dmi*_*try 7

是的它会清除它.因为事件在同一个线程中同步发生,所以不应该有竞争条件.

我的建议:如有疑问,请编写一个小型测试应用程序,然后......测试一下.

更新:我在发布前测试过它.(回应弊端.)

  • @CodingGorilla你错了.测试它,你会看到.提示:`=`和`+ =`是不同的运算符. (3认同)
  • @CodingGorilla,严格来说,是的.但我认为这就是OP的含义.此外,从技术上讲,您无法"清除"事件 - 包含代理列表的对象是不可变的.当您订阅/退订/从一个事件,将创建新的对象,并引用更改为指向一个新的对象方含委托的更新列表......在我看来,这是更好地检查它是否触发一个事件之前为null.这样我们可以通过将其指定为null来"清除"它... (2认同)