Déclencher des événements hérités en C#
Lorsque vous travaillez avec l'héritage en C#, il est important de comprendre comment accéder correctement aux événements déclarés et les déclencher. dans une classe de base.
Supposons que vous ayez une classe de base avec les événements suivants défini :
public event EventHandler Loading; public event EventHandler Finished;
Dans une classe qui hérite de cette classe de base, vous pouvez rencontrer une erreur lorsque vous tentez de déclencher ces événements directement, par exemple :
this.Loading(this, new EventHandler()); // Error: The event 'BaseClass.Loading' can only appear on the left hand side of += or -=
Cette erreur se produit car les événements ne sont pas accessibles comme les membres hérités ordinaires. Pour déclencher des événements à partir d'une classe héritée, l'approche suivante doit être utilisée :
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 InheritedClass : BaseClass { public void DoSomeStuff() { ... OnLoading(EventArgs.Empty); ... OnFinished(EventArgs.Empty); } }
En utilisant des méthodes protégées pour déclencher des événements dans une classe de base, vous pouvez vous assurer que les gestionnaires d'événements sont correctement invoqués à partir de classes dérivées tout en conservant l'encapsulation du mécanisme de déclenchement d'événements.
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!