Auslösen geerbter Ereignisse in C#
Bei der Arbeit mit Vererbung in C# ist es wichtig zu verstehen, wie man ordnungsgemäß auf deklarierte Ereignisse zugreift und diese auslöst in einer Basisklasse.
Angenommen, Sie haben eine Basisklasse mit den folgenden Ereignissen definiert:
public event EventHandler Loading; public event EventHandler Finished;
In einer Klasse, die von dieser Basisklasse erbt, kann beim Versuch, diese Ereignisse direkt auszulösen, ein Fehler auftreten, z. B.:
this.Loading(this, new EventHandler()); // Error: The event 'BaseClass.Loading' can only appear on the left hand side of += or -=
Dieser Fehler tritt auf, weil Auf Ereignisse kann nicht wie auf normale geerbte Mitglieder zugegriffen werden. Um Ereignisse aus einer geerbten Klasse auszulösen, sollte der folgende Ansatz verwendet werden:
protected virtual void OnLoading(EventArgs e) { EventHandler handler = Loading; if(handler != null) { handler(this, e); } } protected virtual void OnFinished(EventArgs e) { EventHandler handler = Finished; if(handler != null) { handler(this, e); } }
public class InheritedClass : BaseClass { public void DoSomeStuff() { ... OnLoading(EventArgs.Empty); ... OnFinished(EventArgs.Empty); } }
Durch die Verwendung geschützter Methoden zum Auslösen von Ereignissen in einer Basisklasse können Sie sicherstellen, dass Ereignishandler ordnungsgemäß funktionieren wird von abgeleiteten Klassen aufgerufen, während die Kapselung des Ereignisauslösungsmechanismus beibehalten wird.
Das obige ist der detaillierte Inhalt vonWie kann ich geerbte Ereignisse in C# ordnungsgemäß auslösen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!