Maison >développement back-end >C++ >Comment déclencher correctement des événements hérités dans les classes dérivées 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.
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".
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!