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