簡體   English   中英

事件處理程序訪問器/屬性的確切用途是什么?

[英]What exactly is the use of event handler accessors/properties?

我有一行接口:

event EventHandler<MagazineEventArgs> MagazineChangedEvent;

當我實現接口時,Visual Studio會為我生成以下模板:

event EventHandler<MagazineEventArgs> IMagazineConfigView.MagazineChangedEvent
{
     add { throw new NotImplementedException(); }
     remove { throw new NotImplementedException(); }
}

但是,我不知道我應該如何充分利用這些屬性。

通常,您可以只使用類似字段的事件 ,例如,只需聲明:

public event EventHandler<MagazineEventArgs> MagazineChangedEvent;

大致等於聲明一個私有委托字段和訂閱者並取消訂閱的訪問者:

private EventHandler<MagazineEventArgs> magazineChanged;

public event EventHandler<MagazineEventArgs> MagazineChangedEvent
{
    add { magazineChanged += value; }
    remove { magazineChanged -= value; }
}

...但是類字段事件語法提供了更多的線程安全性。 線程安全性的確切性質取決於您使用的C#版本。 從C#4開始,它們比以前更加干凈-有關更多詳細信息,請參閱Chris Burrows的博客文章( 第1 部分第2 部分第3部分后記 )。

通常,您只需要在做一些完全不同的事情時自己實現事件即可-例如,將事件訂閱鏈接到另一個基礎事件,或者使用EventHandlerList作為有效地存儲各種事件的稀疏訂閱的方式。

了解事件和普通委托字段之間的區別非常重要-類似於屬性和字段之間的區別,盡管由於事件僅具有“訂閱和取消訂閱”操作,而調用者無法提出它們或確定其他訂戶的方式,所以它的細微差別會更大。 有關更多信息,請參見我關於該主題的文章

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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