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

Comment déclencher correctement les événements hérités en C# ?

Patricia Arquette
Patricia Arquetteoriginal
2024-12-26 12:07:10927parcourir

How to Properly Raise Inherited Events in C#?

Comment déclencher des événements hérités en C#

En C#, les événements peuvent être déclarés dans les classes de base et accessibles par les classes dérivées. Cependant, déclencher des événements dans des classes héritées nécessite une gestion spécifique.

Problème :

Lorsque vous tentez de déclencher un événement hérité d'une classe de base, vous pouvez rencontrer une erreur indiquant que l'événement ne peut apparaître qu'à gauche du = ou du -= opérateurs.

Solution :

Pour déclencher des événements hérités, vous devez créer des méthodes protégées dans la classe de base qui peuvent être utilisées pour invoquer les événements. Ces méthodes doivent suivre la convention de dénomination « OnEventName ».

Par exemple, considérons la classe de base suivante :

public class BaseClass
{
    public event EventHandler Loading;
    public event EventHandler Finished;
}

Méthodes de déclenchement d'événements protégés :

Dans la classe de base, créez des méthodes protégées comme les suivantes :

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

Raising Événements dans la classe dérivée :

Dans la classe dérivée, appelez les méthodes protégées pour déclencher les événements :

public class DerivedClass : BaseClass
{
    public void DoSomething()
    {
        ...
        OnLoading(EventArgs.Empty);
        ...
        OnFinished(EventArgs.Empty);
    }
}

Remarque :

  • Les méthodes protégées peuvent être modifiées pour vérifier si le gestionnaire d'événements doit être invoqué (par exemple, en vérifiant handler.GetInvocationList().Length > 0).
  • Cette approche garantit que les événements peuvent être déclenchés et traités de manière cohérente dans toute la hiérarchie d'héritage.

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