Il me semble étrange que m_UserChanged est déclarée comme un événement plutôt que d'une instance de délégué (est que la bonne terminologie ... je reçois confus w/délégués) . Les événements sont analogues à un modèle de propriété simple en ce qu'ils enveloppent essentiellement les champs sous-jacents dans une paire de méthodes transparentes.
La façon dont je le comprends, .Net permet la création de implcit (anonyme?) Événement et les propriétés en prenant quelque chose comme ceci:
public int Value { get; set;}
public event EventHandler ValueChanged;
puis créer les objets d'espace réservé sous-jacents respectifs pour générer quelque chose de plus comme ceci:
private int _Value;
public int Value { get { return _Value;} set { _Value = value;}}
private EventHandler _ValueChanged;
public event EventHandler ValueChange { add { _ValueChanged += value;} remove { _ValueChanged -= value;}}
l'objet sous-jacent peut être défini de façon explicite bien sûr, mais ce que l'exemple de code ci-dessus ressemble est un peu d'une confusion entre la déclaration d'événements explicites et implicites ... il ressemble à ce qui suit est réelle ment se fait (dans les coulisses, pour ainsi dire):
private UserChangedHandler _m_UserChanged;
private event UserChangedHandler m_UserChanged { add { _m_UserChanged += value;} remove { _m_UserChanged -= value;}}
public event UserChangedHandler UserChanged
{
add
{
if (m_UserChanged != value)
{
m_UserChanged += value;
}
}
}
Il ne compte pas vraiment dans le grand schéma des choses, je ne pense pas, mais il ressemble à un oubli.
Bien que le code ci-dessus ne vous empêchera pas d'ajouter deux fois la même méthode. Si vous ajoutez une méthode A et une méthode B à l'événement UserChanged, vous pouvez toujours ajouter de nouveau la méthode A. –
@Matthew Manela: Vous avez raison, cela ne fera que prévenir les ajouts consécutifs. Encore tôt le matin, merci de le signaler. – Aren