Maison > développement back-end > C++ > Comment puis-je déclencher correctement des événements hérités en C# ?

Comment puis-je déclencher correctement des événements hérités en C# ?

DDD
Libérer: 2024-12-25 20:02:15
original
777 Les gens l'ont consulté

How Can I Properly Raise Inherited Events in C#?

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;
Copier après la connexion

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 -= 
Copier après la connexion

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 :

  1. Dans la classe de base, créez des méthodes protégées qui peuvent être utilisées pour déclencher les événements. Ces méthodes doivent être nommées en utilisant le préfixe "On" suivi du nom de l'événement :
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);
    }
}
Copier après la connexion
  1. Dans les classes qui héritent de cette classe de base, les méthodes OnLoading et OnFinished peuvent être appelées pour déclencher les événements :
public class InheritedClass : BaseClass
{
    public void DoSomeStuff()
    {
        ...
        OnLoading(EventArgs.Empty);
        ...
        OnFinished(EventArgs.Empty);
    }
}
Copier après la connexion

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!

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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal