C #: Ereignis mit Explizität add / remove! = Typisches Ereignis?
Ich habe einen generischen Event-Handler deklariert
public delegate void EventHandler();
zu der ich die Erweiterungsmethode 'RaiseEvent' hinzugefügt habe:
public static void RaiseEvent(this EventHandler self) {
if (self != null) self.Invoke();
}
Wenn ich das Ereignis mit der typischen Syntax definiere
public event EventHandler TypicalEvent;
dann kann ich die erweiterungsmethode ohne probleme aufrufen:
TypicalEvent.RaiseEvent();
Aber wenn ich das Ereignis mit expliziter Add / Remove-Syntax definiere
private EventHandler _explicitEvent;
public event EventHandler ExplicitEvent {
add { _explicitEvent += value; }
remove { _explicitEvent -= value; }
}
In diesem Fall ist die Erweiterungsmethode für das Ereignis nicht vorhanden, das mit der expliziten Add / Remove-Syntax definiert wurde:
ExplicitEvent.RaiseEvent(); //RaiseEvent() does not exist on the event for some reason
Und wenn ich zum Ereignis gehe, um den Grund zu sehen, heißt es:
Das Ereignis 'ExplicitEvent' kann nur auf der linken Seite von + = oder - = angezeigt werden
Warum sollte sich ein Ereignis, das mit der typischen Syntax definiert wurde, von einem Ereignis unterscheiden, das mit der expliziten Add / Remove-Syntax definiert wurde, und warum funktionieren Erweiterungsmethoden mit letzterer nicht?
EDIT: Ich stellte fest, dass ich es umgehen kann, indem ich den privaten Event-Handler direkt benutze:
_explicitEvent.RaiseEvent();
Aber ich verstehe immer noch nicht, warum ich das Ereignis nicht direkt wie das mit der typischen Syntax definierte Ereignis verwenden kann. Vielleicht kann mich jemand aufklären.