2014-05-14 1 views
0

J'ai une interface avec la ligne:Quelle est exactement l'utilisation des accesseurs/propriétés du gestionnaire d'événements?

event EventHandler<MagazineEventArgs> MagazineChangedEvent; 

Quand j'implémentent l'interface, Visual Studio génère le modèle suivant pour moi:

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

Cependant, je ne comprends pas exactement comment je devrais faire usage de ces propriétés.

Répondre

3

Souvent, vous pouvez simplement utiliser un événement de type champ , par ex. simplement déclarer:

public event EventHandler<MagazineEventArgs> MagazineChangedEvent; 

C'est à peu près équivalent à déclarer un champ de délégué privé et accesseurs qui y souscrivent et vous désabonner de ce:

private EventHandler<MagazineEventArgs> magazineChanged; 

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

... mais la syntaxe des événements comme champ fournit un peu plus de sécurité du fil. La nature exacte de cette sécurité dépend de la version de C# que vous utilisez. A partir de C# 4, ils sont un peu plus propres qu'ils ne l'étaient - voir les billets de blog de Chris Burrows pour plus de détails (part 1, part 2, part 3, afterword).

En général, vous ne devez implémenter l'événement vous-même si vous faites quelque chose d'assez différent - par exemple, abonnement événement enchaînant à un différent événement sous-jacent, ou d'utiliser EventHandlerList comme un moyen de stocker efficacement les abonnements rares pour un large éventail d'événements.

Il est important de comprendre comment les événements et les champs de délégués simples diffèrent - il est similaire à la différence entre les propriétés et les champs, bien que légèrement plus nuancée que les événements ont seulement « subscribe et unsubscribe » opérations, sans aucun moyen de l'appelant élever eux ou en déterminant d'autres abonnés. Voir my article on the topic pour plus d'informations.

Questions connexes