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

Comment appeler correctement des événements hérités dans des classes dérivées ?

Mary-Kate Olsen
Libérer: 2024-12-28 10:12:11
original
751 Les gens l'ont consulté

How Do I Properly Invoke Inherited Events in Derived Classes?

Invocation d'événements personnalisés dans les classes héritées

Dans la programmation orientée objet, l'héritage permet aux classes dérivées d'hériter des propriétés et des comportements des classes de base. Cependant, certains aspects des membres hérités peuvent nécessiter un traitement particulier.

Dans ce cas, nous avons une classe de base avec deux événements, Loading et Finished, qui déclenchent des notifications lorsque des actions spécifiques se produisent. Lorsque vous tentez de déclencher ces événements dans une classe héritée, une erreur est rencontrée.

La raison de cette erreur est que les événements ne sont pas simplement des méthodes ; ce sont des délégués qui encapsulent une liste de gestionnaires d'événements abonnés. Dans la classe héritée, le compilateur s'attend à ce que vous accédiez au délégué d'événement lui-même, plutôt que de l'appeler directement.

Pour résoudre ce problème, nous devons créer des méthodes protégées dans la classe de base qui encapsulent l'invocation d'événement. Ces méthodes, nommées OnLoading et OnFinished, vérifieront si des gestionnaires d'événements sont enregistrés et les invoqueront de manière appropriée.

Dans la classe héritée, nous pouvons ensuite appeler ces méthodes protégées pour déclencher les événements. Ce faisant, nous garantissons que les notifications d'événements sont propagées correctement à tous les gestionnaires abonnés. Voici un exemple :

// Base class
public class BaseClass
{
    public event EventHandler Loading;
    public event EventHandler Finished;

    protected virtual void OnLoading(EventArgs e)
    {
        Loading?.Invoke(this, e);
    }

    protected virtual void OnFinished(EventArgs e)
    {
        Finished?.Invoke(this, e);
    }
}

// Derived class
public class DerivedClass : BaseClass
{
    public void DoSomething()
    {
        ...
        OnLoading(EventArgs.Empty);
        ...
        OnFinished(EventArgs.Empty);
    }
}
Copier après la connexion

En suivant cette approche, nous pouvons réussir à déclencher des événements hérités dans les classes dérivées et garantir que les gestionnaires d'événements abonnés sont notifiés de manière appropriée.

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal