什么是事件处理程序检查不为空?

时间:2013-02-03 18:02:25

标签: c# events delegates event-handling observer-pattern

在所有问题答案的代码中:

检查EventHandler handler是否为空

EventHandler handler = this.somethingHappened;  
if (handler != null)  
{  
   handler(this, EventArgs.Empty);  
}  

订阅:

 observable.SomethingHappened += observer.HandleEvent;

以及互联网上的文章,教程,示例等 虽然我无法理解这个处理程序何时以及如何发生null。

我已经阅读了类似问题的答案:

但我仍然无法理解handler可能恰好是null这样的例子和插图。

有人可以解释一下这段代码中的处理程序可能恰好是null吗?

1 个答案:

答案 0 :(得分:2)

很简单,如果尚未为特定事件处理程序分配任何委托,则它将为null,并且尝试调用它将导致NullReferenceException。

在调用它之前执行空检查可防止发生此NullReferenceException。