Maison >développement back-end >C++ >Comment déclencher correctement des événements hérités dans les classes dérivées C# ?

Comment déclencher correctement des événements hérités dans les classes dérivées C# ?

Linda Hamilton
Linda Hamiltonoriginal
2024-12-25 16:03:10321parcourir

How to Correctly Raise Inherited Events in C# Derived Classes?

Lèvement d'événements hérités en C

Dans la programmation orientée objet, il est courant que les classes héritent des événements de leurs classes de base. Cependant, évoquer ces événements hérités peut prêter à confusion. Cette question aborde l'erreur rencontrée lors de la tentative de déclenchement d'un événement hérité dans une classe dérivée et fournit une solution.

Problème

Dans une classe de base définie comme suit :

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

Une classe dérivée tente de déclencher l'événement hérité :

public class DerivedClass : BaseClass
{
    // Error: 'BaseClass.Loading' can only appear on the left hand side of += or -=
    this.Loading(this, new EventHandler());
}

Cette erreur indique que l'événement n'est pas accessible directement à l'aide du Mot-clé "this".

Solution

Pour déclencher un événement hérité, vous devez définir des méthodes protégées dans la classe de base pour gérer l'invocation de l'événement. Ces méthodes permettent de déclencher l'événement même lorsque la classe dérivée remplace l'événement.

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);
    }

    // Invoking the events from the derived class
    public class DerivedClass : BaseClass
    {
        public void RaiseLoadingEvent()
        {
            OnLoading(EventArgs.Empty);
        }

        public void RaiseFinishedEvent()
        {
            OnFinished(EventArgs.Empty);
        }
    }
}

En appelant OnLoading ou OnFinished dans la classe dérivée, les gestionnaires abonnés aux événements dans la classe de base seront invoqués , garantissant une gestion appropriée des événements dans les classes dérivées.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn