Maison > développement back-end > C++ > Comment supprimer efficacement les gestionnaires d'événements Lambda en C# ?

Comment supprimer efficacement les gestionnaires d'événements Lambda en C# ?

Patricia Arquette
Libérer: 2025-01-20 09:31:09
original
981 Les gens l'ont consulté

How to Effectively Remove Lambda Event Handlers in C#?

Supprimer efficacement les gestionnaires d'événements Lambda en C#

Les expressions Lambda offrent un moyen concis et puissant de gérer les événements en C#. Cependant, la suppression des gestionnaires d'événements Lambda nécessite une compréhension plus approfondie du mécanisme EventHandler sous-jacent.

Assurer le caractère unique de la délégation

La spécification C# permet de créer plusieurs instances de délégué à partir de la même expression Lambda. Cela peut entraîner des problèmes lors de la tentative de désabonnement du gestionnaire. Pour éviter toute confusion, veillez à stocker l'instance de délégué utilisée pour les abonnements, comme ceci :

<code class="language-csharp">EventHandler handler = (s, e) => MessageBox.Show("Woho");

button.Click += handler;
...
button.Click -= handler;</code>
Copier après la connexion

Méthodes d'extraction pour la gestion des événements

Une autre façon de gérer l'événement consiste à extraire une méthode distincte et à l'attribuer au gestionnaire d'événement :

<code class="language-csharp">public void ShowWoho(object sender, EventArgs e)
{
     MessageBox.Show("Woho");
}

...

button.Click += ShowWoho;
...
button.Click -= ShowWoho;</code>
Copier après la connexion

Gestionnaire d'événements Lambda auto-désabonné

Pour les scénarios dans lesquels le gestionnaire d'événements doit se supprimer après un seul appel, des techniques plus complexes sont nécessaires :

<code class="language-csharp">EventHandler handler = null;
handler = (sender, args) =>
{
    button.Click -= handler; // 取消订阅
    // 在此处添加您的单次代码
};
button.Click += handler;</code>
Copier après la connexion

Cette méthode repose sur l'attribution initiale d'une valeur nulle à la variable du gestionnaire pour garantir que l'expression lambda englobante peut modifier sa valeur.

Défi de l'emballage

Bien qu'il soit possible d'encapsuler des gestionnaires d'événements dans des méthodes, la complexité de la représentation des événements peut rendre la tâche difficile. Une version plus élégante impliquerait la création d'un EventHandler dédié avec une fonctionnalité de désabonnement automatique, mais cela doit être implémenté avec soin car des paramètres de type génériques et un désabonnement correct des événements sont requis.

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