0
在所有答案的代码质疑:什么是不为空的事件处理程序检查?
存在对EventHandler handler
不是空
EventHandler handler = this.somethingHappened;
if (handler != null)
{
handler(this, EventArgs.Empty);
}
与认购支票:
observable.SomethingHappened += observer.HandleEvent;
还有l在互联网上的文章,教程,例子等。
虽然我无法掌握何时以及如何处理这个处理程序可能是空的。
我读过在回答类似的问题:
,但我仍然无法掌握如何在此类的例子,说明了handler
可能碰巧null
。
任何人都可以解释我在这段代码中的处理程序如何碰巧是null
?
但它被分配在所有这样的例子中 – Fulproof
不,它是从另一个代表复制的。被复制的值*可以为空。它被复制的原因是为调用列表创建一个快照,以便在空检查和调用之间不存在委托变为空的风险。简单的经验法则......如果事件的调用列表中没有任何内容,则该值为空。 – spender
是的,正如@spender所说的,如果'this.somethingHappened'是'null',那么'handler'也将是'null'。 – JLRishe