簡體   English   中英

如何顯式事件訪問器

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM