Heim >Backend-Entwicklung >C++ >Wie löst man geerbte Ereignisse in von C# abgeleiteten Klassen korrekt aus?
In der objektorientierten Programmierung ist es üblich, dass Klassen Ereignisse von ihren Basisklassen erben. Das Erhöhen dieser geerbten Ereignisse kann jedoch zu Verwirrung führen. Diese Frage befasst sich mit dem Fehler, der auftritt, wenn versucht wird, ein geerbtes Ereignis in einer abgeleiteten Klasse auszulösen, und bietet eine Lösung dafür.
In einer Basisklasse, die wie folgt definiert ist:
public class BaseClass { public event EventHandler Loading; public event EventHandler Finished; }
Eine abgeleitete Klasse versucht, das geerbte Ereignis auszulösen:
public class DerivedClass : BaseClass { // Error: 'BaseClass.Loading' can only appear on the left hand side of += or -= this.Loading(this, new EventHandler()); }
Dieser Fehler weist darauf hin, dass auf das Ereignis nicht direkt über zugegriffen werden kann Schlüsselwort „this“.
Um ein geerbtes Ereignis auszulösen, müssen Sie geschützte Methoden in der Basisklasse definieren, um den Ereignisaufruf zu verarbeiten. Mit diesen Methoden kann das Ereignis auch dann ausgelöst werden, wenn die abgeleitete Klasse das Ereignis überschreibt.
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); } // Invoking the events from the derived class public class DerivedClass : BaseClass { public void RaiseLoadingEvent() { OnLoading(EventArgs.Empty); } public void RaiseFinishedEvent() { OnFinished(EventArgs.Empty); } } }
Durch den Aufruf von OnLoading oder OnFinished in der abgeleiteten Klasse werden die Handler aufgerufen, die die Ereignisse in der Basisklasse abonniert haben , um eine ordnungsgemäße Ereignisbehandlung in den abgeleiteten Klassen sicherzustellen.
Das obige ist der detaillierte Inhalt vonWie löst man geerbte Ereignisse in von C# abgeleiteten Klassen korrekt aus?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!