Ich habe eine generische EreignishandlerC#: Ereignis mit Explizitheit hinzufügen/entfernen! = Typisches Ereignis?
erklärtpublic delegate void EventHandler();
auf die ich die Erweiterungsmethode ‚Raise‘ hinzugefügt haben:
public static void RaiseEvent(this EventHandler self) {
if (self != null) self.Invoke();
}
Wenn definiere ich das Ereignis die typische Syntax
public event EventHandler TypicalEvent;
Verwendung
dann kann ich die Erweiterungsmethode ohne Probleme aufrufen:
TypicalEvent.RaiseEvent();
Aber wenn ich das Ereignis mit expliziten hinzufügen/entfernen Syntax definieren
private EventHandler _explicitEvent;
public event EventHandler ExplicitEvent {
add { _explicitEvent += value; }
remove { _explicitEvent -= value; }
}
dann der Extension-Methode existiert nicht auf dem Fall mit expliziter Add definiert/entfernen Syntax:
ExplicitEvent.RaiseEvent(); //RaiseEvent() does not exist on the event for some reason
Und Wenn ich zum Ereignis rüber schwinge, um den Grund zu sehen, heißt es:
Das Ereignis 'ExplicitEvent' kann nur erscheinen auf der linken Seite von + = oder - =
Warum sollte ein Ereignis die typische Syntax von einem Ereignis unterschiedlich sein definiert mit definierten die explizite hinzufügen/entfernen Syntax und warum Erweiterungsmethoden funktionieren nicht auf letzterem?
EDIT: Ich fand es kann direkt mit den privaten Event-Handler um es:
_explicitEvent.RaiseEvent();
Aber ich verstehe immer noch nicht, warum ich nicht das Ereignis direkt wie das Ereignis verwenden kann definiert mit die typische Syntax. Vielleicht kann mich jemand aufklären.
Sie können die Erweiterungsmethode auch nicht außerhalb der Klasse verwenden. – IllidanS4