Heim >Backend-Entwicklung >C++ >Wie kann ich geerbte Ereignisse in von C# abgeleiteten Klassen ordnungsgemäß auslösen?

Wie kann ich geerbte Ereignisse in von C# abgeleiteten Klassen ordnungsgemäß auslösen?

Patricia Arquette
Patricia ArquetteOriginal
2024-12-24 11:48:15226Durchsuche

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

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:

  1. Geschützte Event-Raising-Methoden in der Basisklasse erstellen:
    Geschützte Methoden in der Basisklasse definieren, die dafür verantwortlich sind die Ereignisse erhöhen. Zum Beispiel:
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);
        }
    }
}
  1. Ereignisauslösende Methoden in abgeleiteten Klassen aufrufen:
    Anstatt in abgeleiteten Klassen die Ereignisse direkt aufzurufen, rufen Sie die entsprechenden auf Ereignisauslösende Methoden, die in der Basisklasse definiert sind. Zum Beispiel:
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!

Stellungnahme:
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