C#: événement explicitement ajouter/supprimer != typique de l'événement?

Je l'ai déclaré à un générique de gestionnaire d'événement

public delegate void EventHandler();

à laquelle j'ai ajouté de la méthode d'extension 'RaiseEvent':

public static void RaiseEvent(this EventHandler self)        {
   if (self != null) self.Invoke();
}

Quand j'définir l'événement en utilisant la syntaxe typique

public event EventHandler TypicalEvent;

alors je peux appeler la méthode d'extension sans problèmes:

TypicalEvent.RaiseEvent();

Mais quand je définissent l'événement explicite ajout/suppression de syntaxe

private EventHandler _explicitEvent;
public event EventHandler ExplicitEvent {
   add { _explicitEvent += value; } 
   remove { _explicitEvent -= value; }
}

ensuite la méthode d'extension n'existe pas sur l'événement défini de manière explicite ajout/suppression de syntaxe:

ExplicitEvent.RaiseEvent(); //RaiseEvent() does not exist on the event for some reason

Et quand j'ai passez la souris sur l'événement pour voir la raison pour laquelle il dit:

L'événement "ExplicitEvent' ne peut
apparaissent sur le côté gauche de l' += ou
-=

Pourquoi un événement défini à l'aide de la syntaxe typique être différent d'un événement défini à l'aide de l'explicite ajout/suppression de syntaxe et pourquoi les méthodes d'extension ne fonctionne pas sur l'autre?

EDIT: j'ai trouvé, je peux le contourner en utilisant le gestionnaire d'événement privé directement:

_explicitEvent.RaiseEvent();

Mais je ne comprends toujours pas pourquoi je ne peux pas utiliser l'événement directement comme des cas définis à l'aide de la syntaxe typique. Peut-être que quelqu'un peut m'éclairer.

  • Vous ne pouvez pas également utiliser l'extension de la méthode à partir de l'extérieur de la classe.
InformationsquelleAutor | 2009-06-18