C# LanguageÉvénements

Introduction

Un événement est une notification indiquant que quelque chose s'est produit (tel qu'un clic de souris) ou, dans certains cas, est sur le point de se produire (par exemple, une modification de prix).

Les classes peuvent définir des événements et leurs instances (objets) peuvent déclencher ces événements. Par exemple, un bouton peut contenir un événement Click qui est déclenché lorsqu'un utilisateur a cliqué dessus.

Les gestionnaires d'événements sont alors des méthodes appelées lorsque leur événement correspondant est déclenché. Un formulaire peut contenir un gestionnaire d'événements Clicked pour chaque bouton qu'il contient, par exemple.

Paramètres

Paramètre Détails
EventArgsT Le type qui dérive de EventArgs et contient les paramètres de l'événement.
Nom de l'événement Le nom de l'évènement.
HandlerName Le nom du gestionnaire d'événements.
SenderObject L'objet qui appelle l'événement.
EventArguments Une instance du type EventArgsT qui contient les paramètres d'événement.

Remarques

En levant un événement:

  • Vérifiez toujours si le délégué est null . Un délégué nul signifie que l'événement n'a pas d'abonnés. Augmenter un événement sans abonnés entraînera une NullReferenceException .
6,0
  • Copiez le délégué (par exemple, EventName ) dans une variable locale (par exemple, eventName ) avant de rechercher la nullité / la eventName l'événement. Cela évite les conditions de concurrence dans les environnements multithread:

Faux :

    if(Changed != null)      // Changed has 1 subscriber at this point
                             // In another thread, that one subscriber decided to unsubscribe
        Changed(this, args); // `Changed` is now null, `NullReferenceException` is thrown.

À droite :

    // Cache the "Changed" event as a local. If it is not null, then use
    // the LOCAL variable (handler) to raise the event, NOT the event itself.
    var handler = Changed;
    if(handler != null)
        handler(this, args);
6,0
  • Utilisez l'opérateur null-conditionnel (?.) Pour générer la méthode au lieu de vérifier par null le délégué des abonnés dans une instruction if : EventName?.Invoke(SenderObject, new EventArgsT());
  • Lorsque vous utilisez Action <> pour déclarer des types de délégué, la signature du gestionnaire de méthode / événement anonyme doit être identique au type de délégué anonyme déclaré dans la déclaration d'événement.

Événements Exemples Liés