[英]How to Explicit event accessors
以下是明確的事件評估員的草圖:
delegate void EventHandler (SomeObject m, EventArgs e);
EventHandler _priceChanged; //Private Delegate
public event EventHandler PriceChanged
{
add {_priceChanged += value;}
remove {_priceChanged -= value;}
}
顯然,這與標准實現之間的區別在於委托的使用不是線程安全的。 如何使這個線程安全?
我如何允許以下內容:
if (PriceChanged != null)... etc
嘗試這個:
delegate void EventHandler (SomeObject m, EventArgs e);
EventHandler _priceChanged; //Private Delegate
private Object _myLock = new Object();
public event EventHandler PriceChanged
{
add {
lock(_myLock)
{_priceChanged += value;}
}
remove {
lock(_myLock)
{_priceChanged -= value;}
}
}
- 顯然,這與標准實現之間的區別在於委托的使用不是線程安全的。 如何使這個線程安全?
請參考Shai的回答。
- 我如何允許以下內容:
if (PriceChanged != null)... etc
你不能,不是在事件處理器聲明級別 - 這總是需要在調用它的代碼中完成。 舉一個例子: _priceChanged
為null的一個原因是,如果既沒有調用也沒有刪除 - 那么它們怎么能阻止null異常呢? 除非你想用虛擬回調初始化你的委托集合,但這只是邪惡的。
如果您想要替代方案,請查看被動擴展 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.