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

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

DDD
DDDOriginal
2024-12-25 20:02:15783Durchsuche

How Can I Properly Raise Inherited Events in C#?

Auslösen geerbter Ereignisse in C#

Bei der Arbeit mit Vererbung in C# ist es wichtig zu verstehen, wie man ordnungsgemäß auf deklarierte Ereignisse zugreift und diese auslöst in einer Basisklasse.

Angenommen, Sie haben eine Basisklasse mit den folgenden Ereignissen definiert:

public event EventHandler Loading;
public event EventHandler Finished;

In einer Klasse, die von dieser Basisklasse erbt, kann beim Versuch, diese Ereignisse direkt auszulösen, ein Fehler auftreten, z. B.:

this.Loading(this, new EventHandler()); // Error: The event 'BaseClass.Loading' can only appear on the left hand side of += or -= 

Dieser Fehler tritt auf, weil Auf Ereignisse kann nicht wie auf normale geerbte Mitglieder zugegriffen werden. Um Ereignisse aus einer geerbten Klasse auszulösen, sollte der folgende Ansatz verwendet werden:

  1. Erstellen Sie in der Basisklasse geschützte Methoden, die zum Auslösen der Ereignisse verwendet werden können. Diese Methoden sollten mit dem Präfix „On“ benannt werden, gefolgt vom Ereignisnamen:
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. In Klassen, die von dieser Basisklasse erben, können die Methoden OnLoading und OnFinished aufgerufen werden Erhöhen Sie die Ereignisse:
public class InheritedClass : BaseClass
{
    public void DoSomeStuff()
    {
        ...
        OnLoading(EventArgs.Empty);
        ...
        OnFinished(EventArgs.Empty);
    }
}

Durch die Verwendung geschützter Methoden zum Auslösen von Ereignissen in einer Basisklasse können Sie sicherstellen, dass Ereignishandler ordnungsgemäß funktionieren wird von abgeleiteten Klassen aufgerufen, während die Kapselung des Ereignisauslösungsmechanismus beibehalten wird.

Das obige ist der detaillierte Inhalt vonWie kann ich geerbte Ereignisse in C# 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