Heim > Backend-Entwicklung > C++ > Wie rufe ich geerbte Ereignisse in abgeleiteten Klassen ordnungsgemäß auf?

Wie rufe ich geerbte Ereignisse in abgeleiteten Klassen ordnungsgemäß auf?

Mary-Kate Olsen
Freigeben: 2024-12-28 10:12:11
Original
750 Leute haben es durchsucht

How Do I Properly Invoke Inherited Events in Derived Classes?

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);
    }
}
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage