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
Patricia Arquetteoriginal
2024-12-24 11:48:15229parcourir

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;
}

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

this.Loading(this, new EventHandler());

entraîne l'erreur :

The event 'BaseClass.Loading' can only appear on the left hand side of += or -= (BaseClass')

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);
        }
    }
}
  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);
    }
}

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!

Déclaration:
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