Benutzerdefinierter Ereignisaufruf in geerbten Klassen
In der objektorientierten Programmierung ermöglicht die Vererbung abgeleiteten Klassen, Eigenschaften und Verhaltensweisen von Basisklassen zu erben. Bestimmte Aspekte geerbter Mitglieder erfordern jedoch möglicherweise eine besondere Behandlung.
In diesem Fall haben wir eine Basisklasse mit zwei Ereignissen, Loading und Finished, die Benachrichtigungen auslösen, wenn bestimmte Aktionen ausgeführt werden. Beim Versuch, diese Ereignisse in einer geerbten Klasse auszulösen, tritt ein Fehler auf.
Der Grund für diesen Fehler ist, dass Ereignisse nicht einfach Methoden sind; Sie sind Delegaten, die eine Liste abonnierter Ereignishandler kapseln. In der geerbten Klasse erwartet der Compiler, dass Sie auf den Ereignisdelegaten selbst zugreifen, anstatt ihn direkt aufzurufen.
Um dies zu beheben, müssen wir geschützte Methoden in der Basisklasse erstellen, die den Ereignisaufruf kapseln. Diese Methoden mit den Namen OnLoading und OnFinished prüfen, ob Event-Handler registriert sind, und rufen sie entsprechend auf.
In der geerbten Klasse können wir dann diese geschützten Methoden aufrufen, um die Ereignisse auszulösen. Dadurch stellen wir sicher, dass Ereignisbenachrichtigungen korrekt an alle abonnierten Handler weitergegeben werden. Hier ist ein Beispiel:
// Base class public class BaseClass { public event EventHandler Loading; public event EventHandler Finished; protected virtual void OnLoading(EventArgs e) { Loading?.Invoke(this, e); } protected virtual void OnFinished(EventArgs e) { Finished?.Invoke(this, e); } } // Derived class public class DerivedClass : BaseClass { public void DoSomething() { ... OnLoading(EventArgs.Empty); ... OnFinished(EventArgs.Empty); } }
Durch die Verfolgung dieses Ansatzes können wir geerbte Ereignisse in abgeleiteten Klassen erfolgreich auslösen und sicherstellen, dass abonnierte Ereignishandler ordnungsgemäß benachrichtigt werden.
Das obige ist der detaillierte Inhalt vonWie rufe ich geerbte Ereignisse in abgeleiteten Klassen ordnungsgemäß auf?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!