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

Comment puis-je déclencher correctement des événements hérités dans des classes dérivées C# ?

Patricia Arquette
Libérer: 2024-12-24 11:48:15
original
249 Les gens l'ont consulté

How Can I Properly Raise Inherited Events in C# Derived Classes?

Soumission d'événements hérités d'une classe de base en C#

En C#, il est courant d'hériter d'événements d'une classe de base pour faciliter l'événement manipulation dans les classes dérivées. Cependant, déclencher de tels événements hérités nécessite une approche spécifique pour éviter les erreurs du compilateur.

Considérons un scénario dans lequel une classe de base définit les événements suivants :

public class BaseClass
{
    public event EventHandler Loading;
    public event EventHandler Finished;
}
Copier après la connexion

Dans une classe dérivée, tenter de déclencher l'événement Loading utilisant :

this.Loading(this, new EventHandler());
Copier après la connexion

entraîne l'erreur :

The event 'BaseClass.Loading' can only appear on the left hand side of += or -= (BaseClass')
Copier après la connexion

Cette erreur se produit car 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 déclenchés en appelant des méthodes spécifiques définies dans la classe de base. Pour y parvenir, les étapes suivantes sont nécessaires :

  1. Créer des méthodes protégées de génération d'événements dans la classe de base :
    Définir les méthodes protégées dans la classe de base qui sont responsables de soulever les événements. Par exemple :
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);
        }
    }
}
Copier après la connexion
  1. Invoquer des méthodes de génération d'événements dans les classes dérivées :
    Dans les classes dérivées, au lieu d'invoquer directement les événements, appelez le correspondant méthodes de déclenchement d'événements définies dans la classe de base. Par exemple :
public class DerivedClass : BaseClass
{
    public void DoSomething()
    {
        // Raise Loading event
        OnLoading(EventArgs.Empty);

        // Raise Finished event
        OnFinished(EventArgs.Empty);
    }
}
Copier après la connexion

En suivant cette approche, les événements hérités peuvent être déclenchés de manière sûre et efficace dans des classes dérivées en C#.

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