Méthode de désabonnement du gestionnaire d'événements Lambda en C#
En C#, les expressions Lambda anonymes constituent un moyen pratique de créer des gestionnaires d'événements. Cependant, une question courante est la suivante : comment supprimer ou se désabonner de ces gestionnaires d'événements.
La spécification C# ne garantit pas que deux expressions Lambda avec le même code produiront des délégués égaux. Pour garantir un désabonnement réussi, il est recommandé de stocker explicitement l’instance du délégué.
Utiliser les méthodes EventHandler nommées
Le moyen le plus simple consiste à définir une méthode et à l'attribuer en tant que gestionnaire d'événements :
<code class="language-csharp">public void ShowWoho(object sender, EventArgs e) { MessageBox.Show("Woho"); } ... button.Click += ShowWoho; ... button.Click -= ShowWoho;</code>
Utilisez des délégués pour stocker des variables
Pour créer un gestionnaire d'événements auto-supprimant à l'aide d'une expression Lambda, vous pouvez utiliser un délégué pour stocker la variable :
<code class="language-csharp">EventHandler handler = null; handler = (sender, args) => { button.Click -= handler; // 取消订阅 // 在此处添加仅执行一次的代码 }; button.Click += handler;</code>
Utiliser des méthodes d'assistance
Bien que les méthodes d'assistance ne puissent pas être utilisées pour encapsuler les gestionnaires d'événements en raison de limitations dans la représentation des événements, les délégués génériques peuvent fournir une solution :
<code class="language-csharp">button.Click += Delegates.AutoUnsubscribe<EventHandler>( (sender, args) => { // 此处添加仅执行一次的代码 }, handler => button.Click -= handler);</code>
En suivant ces méthodes, les développeurs peuvent supprimer efficacement les gestionnaires d'événements Lambda, garantissant ainsi une gestion appropriée des événements et un contrôle sur le cycle de vie de l'abonnement aux événements.
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!