这听起来很疯狂,但我在课堂上创建了一个活动,试图在没有任何人注册的情况下提高它.但是它会给出一个例外.在提出异常之前是否有必要让某人注册?如果是,那么有什么工作呢?
the*_*oop 14
是的,没有注册的事件为空.触发事件的标准方式是:
event EventHandler MyEvent;
private void FireMyEvent(EventArgs e) {
var handler = MyEvent;
if (handler != null)
handler(this, e);
}
Run Code Online (Sandbox Code Playgroud)
Eric Lippert撰写了一篇很棒的文章,讲述为什么这种模式是发射事件的"正确"方式
是.如果没有订阅者,则该事件将为null,并且在调用它时将获得NullReferenceException.正如theco所说的那样,正确的检查方式是,但有一个简单的"捷径":
public event EventHandler Event = delegate {};
Run Code Online (Sandbox Code Playgroud)
这会导致事件的默认订阅者不执行任何操作,因此如果有订阅者,则不会抛出异常.这样做会有轻微的性能开销,但它确实不需要检查空值.
| 归档时间: |
|
| 查看次数: |
265 次 |
| 最近记录: |