可能重複:總是可以添加一個空的事件處理程序嗎?
public event Action handler; … // some method: if(handler != null) handler();
是否有分配一個空的任何缺點:
Is there a downside to adding an anonymous empty delegate on event declaration?
以下圖案使用的事件處理程序(在C#)時是很常見代表參加此活動?這將節省在任何地方的事件被觸發的if !=null
條件。當然,這隻適用於當我們不能保證事件總是被分配一個適當的代表時。
public event Action handler;
…
// in constructor:
handler +=()=>{};
…
// some method:
handler();
當然,雖然有輕微的性能下降,但它使代碼更清潔。這種情況下的最佳做法是什麼?任何技術缺點?
從我的角度來看不是一個好的做法。是的,你保存一個空檢查,但是,幾個月後,當檢查錯誤或維護代碼時,第一個例子更好地說明了代碼的用途。 – Steve
它變得更糟 - 在沒有保護的情況下,處理程序可能在檢查null和調用它之間設置爲null。您應該將'handler'的值複製到一個局部變量中,並檢查_that_是否爲null。 –
由於您不會將'handler'的值複製到局部變量中,因此您的第一個代碼已損壞。 – CodesInChaos