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:
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); } } }
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 #.
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