"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > Comment déclencher correctement les événements héréditaires dans les classes dérivées en C #

Comment déclencher correctement les événements héréditaires dans les classes dérivées en C #

Publié le 2025-04-14
Parcourir:644

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

Raisage des événements hérités à partir d'une classe de base en c #

En C #, il est courant de faire hériter des événements d'une classe de base pour faciliter la gestion des événements dans les classes dérivées. Cependant, l'éducation de ces événements hérités nécessite une approche spécifique pour éviter les erreurs du compilateur.

Considérez un scénario où une classe de base définit les événements suivants:

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

dans une classe dérivée, tentant d'élever l'événement de chargement en utilisant:

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

Results in the Error:

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

Cette erreur se produit parce que les événements, contrairement aux autres membres de la classe, ne peuvent pas être invoqués directement par la classe dérivée. Au lieu de cela, les événements hérités doivent être soulevés en invoquant des méthodes spécifiques définies dans la classe de base. Pour y parvenir, les étapes suivantes sont nécessaires:

  1. Créer des méthodes protégées d'événements dans la classe de base:
    Définissez des méthodes protégées dans la classe de base qui sont chargés d'élever les événements. Par exemple:
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. Invoquez des méthodes d'éléments d'événements dans les classes dérivées:
    dans les classes dérivées, au lieu d'invoquer directement les événements, appelez les méthodes d'événement correspondantes définies dans la classe de base. Par exemple:
public class DerivedClass : BaseClass
{
    public void DoSomething()
    {
        // Raise Loading event
        OnLoading(EventArgs.Empty);

        // Raise Finished event
        OnFinished(EventArgs.Empty);
    }
}

En suivant cette approche, les événements hérités peuvent être soulevés en toute sécurité et efficacement dans des classes dérivées en C #.

Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3