【发布时间】:2012-11-17 17:16:08
【问题描述】:
我们可以通过两种方式引发事件:
public event EventHandler MyEvent;
private void DoSomething()
{
...
var handler = MyEvent;
if (handler != null)
handler(this,EventArgs.Empty);
}
和
public event EventHandler MyEvent = (o,e) => {} ;
private void DoSomething()
{
...
MyEvent(this, EventArgs.Empty);
}
我更喜欢最后一个。它更短。
我的同事坚持第一个变体。
第一个比第二个有优势吗?
【问题讨论】:
-
你至少可以将第一个简化为
if (this.MyEvent != null) this.MyEvent(this, EventArgs.Empty); -
@JonB:错误;这不是线程安全的。
-
你将如何防止类将事件设置为空?
-
@Jon 不,你不应该。这可能会导致竞争条件,请参阅Eric Lippert's blog
-
如果某些代码将事件设置为 null,则第二个变体引发 null 异常。
标签: c# .net events design-patterns