Maison >développement back-end >C++ >Comment appeler correctement des événements hérités dans des classes dérivées ?
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); } }
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!