Heim >Backend-Entwicklung >C++ >Wie kann ich geerbte Ereignisse in von C# abgeleiteten Klassen ordnungsgemäß auslösen?
Ereignisse auslösen, die von einer Basisklasse in C# geerbt wurden
In C# ist es üblich, Ereignisse von einer Basisklasse zu erben, um Ereignisse zu erleichtern Handhabung in abgeleiteten Klassen. Das Auslösen solcher geerbten Ereignisse erfordert jedoch einen speziellen Ansatz, um Compilerfehler zu vermeiden.
Stellen Sie sich ein Szenario vor, in dem eine Basisklasse die folgenden Ereignisse definiert:
public class BaseClass { public event EventHandler Loading; public event EventHandler Finished; }
In einer abgeleiteten Klasse wird versucht, sie auszulösen Das Loading-Ereignis mit:
this.Loading(this, new EventHandler());
führt zu dem Fehler:
The event 'BaseClass.Loading' can only appear on the left hand side of += or -= (BaseClass')
This Der Fehler tritt auf, weil Ereignisse im Gegensatz zu anderen Klassenmitgliedern nicht direkt von der abgeleiteten Klasse aufgerufen werden können. Stattdessen müssen geerbte Ereignisse durch den Aufruf bestimmter, in der Basisklasse definierter Methoden ausgelöst werden. Um dies zu erreichen, sind folgende Schritte notwendig:
public class BaseClass { public event EventHandler Loading; public event EventHandler Finished; 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 DerivedClass : BaseClass { public void DoSomething() { // Raise Loading event OnLoading(EventArgs.Empty); // Raise Finished event OnFinished(EventArgs.Empty); } }
Durch die Befolgung dieses Ansatzes können geerbte Ereignisse sicher und effizient in abgeleiteten Klassen in C# ausgelöst werden.
Das obige ist der detaillierte Inhalt vonWie kann ich geerbte Ereignisse in von C# abgeleiteten Klassen ordnungsgemäß auslösen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!