„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Wie man erbliche Ereignisse in abgeleiteten Klassen in C# richtig auslöst

Wie man erbliche Ereignisse in abgeleiteten Klassen in C# richtig auslöst

Gepostet am 2025-04-14
Durchsuche:926

How Can I Properly Raise Inherited Events in C# Derived Classes?

Erhöhen von Ereignissen, die von einer Basisklasse in C#

In C#geerbt wurden, ist üblich, Ereignisse aus einer Basisklasse zu erben, um die Ereignisbearbeitung in abgeleiteten Klassen zu ermöglichen. Das Erhöhen solcher ererbten Ereignisse erfordert jedoch einen spezifischen Ansatz, um Compiler -Fehler zu vermeiden.

Betrachten { öffentliche Event EventHandler Loading; öffentliche Veranstaltung EventHandler beendet; }

public class BaseClass
{
    public event EventHandler Loading;
    public event EventHandler Finished;
}

this.loading (this, New EventHandler ());

this.Loading(this, new EventHandler());

Die Ereignis 'Baseclass.Alding. (BaseClass ')

The event 'BaseClass.Loading' can only appear on the left hand side of  = or -= (BaseClass')

    Erstellen Sie geschützte Ereignisereignungsmethoden in der Basisklasse:
  1. Definieren Sie geschützte Methoden in der Basisklasse, die für die Erhöhung der Ereignisse verantwortlich sind. Zum Beispiel:
  2. öffentliche Klasse Baseclass { öffentliche Event EventHandler Loading; öffentliche Veranstaltung EventHandler beendet; Geschützte virtuelle Leading (EventArgs E) { EventHandler -Handler = Laden; if (Handler! = NULL) { Handler (dies, e); } } geschützte virtuelle void onfinished (eventArgs e) { EventHandler -Handler = fertig; if (Handler! = NULL) { Handler (dies, e); } } }
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);
        }
    }
}
    Invoke Ereignisvermittlungsmethoden in abgeleiteten Klassen:
  1. in abgeleiteten Klassen, anstatt die Ereignisse direkt aufzurufen, rufen Sie die entsprechenden Ereignisereignungsmethoden, die in der Basisklasse definiert sind, direkt auf. Zum Beispiel:
  2. öffentliche Klasse DerivedClass: BaseClass { öffentliche Leeredosen () { // Ladeereignis erhöhen Onloading (EventArgs.Empty); // Fertigereignis erhöhen Event Onfinished (EventArgs.Empty); } }
public class DerivedClass : BaseClass
{
    public void DoSomething()
    {
        // Raise Loading event
        OnLoading(EventArgs.Empty);

        // Raise Finished event
        OnFinished(EventArgs.Empty);
    }
}
Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3