C# で Lambda イベント ハンドラーをサブスクライブ解除する方法
C# では、匿名ラムダ式を使用してイベント ハンドラーを作成する便利な方法が提供されます。ただし、よくある質問は、これらのイベント ハンドラーを削除またはサブスクライブ解除する方法です。
C# 仕様では、同じコードを持つ 2 つの Lambda 式が等しいデリゲートを生成することは保証されていません。サブスクリプション解除を確実に成功させるには、デリゲート インスタンスを明示的に保存することをお勧めします。
名前付き EventHandler メソッドを使用する
最も簡単な方法は、メソッドを定義し、それをイベント ハンドラーとして割り当てることです。
<code class="language-csharp">public void ShowWoho(object sender, EventArgs e) { MessageBox.Show("Woho"); } ... button.Click += ShowWoho; ... button.Click -= ShowWoho;</code>
デリゲートを使用して変数を保存する
ラムダ式を使用して自動削除イベント ハンドラーを作成するには、デリゲートを使用して変数を保存できます。
<code class="language-csharp">EventHandler handler = null; handler = (sender, args) => { button.Click -= handler; // 取消订阅 // 在此处添加仅执行一次的代码 }; button.Click += handler;</code>
ヘルパー メソッドを使用する
イベント表現の制限のため、ヘルパー メソッドを使用してイベント ハンドラーをカプセル化することはできませんが、汎用デリゲートは解決策を提供できます。
<code class="language-csharp">button.Click += Delegates.AutoUnsubscribe<EventHandler>( (sender, args) => { // 此处添加仅执行一次的代码 }, handler => button.Click -= handler);</code>
これらの方法に従うことで、開発者は Lambda イベント ハンドラーを効果的に削除し、適切なイベント管理とイベント サブスクリプションのライフサイクルの制御を確保できます。
以上がC# で Lambda イベント ハンドラーをサブスクライブ解除する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。