C# で Lambda イベント ハンドラーを効果的に削除します
ラムダ式は、C# でイベントを処理するための簡潔かつ強力な方法を提供します。ただし、Lambda イベント ハンドラーを削除するには、基礎となる EventHandler メカニズムをより深く理解する必要があります。
委任の一意性を確保する
C# 仕様では、同じ Lambda 式から複数のデリゲート インスタンスを作成できます。これにより、ハンドラーのサブスクライブを解除しようとすると問題が発生する可能性があります。混乱を避けるために、サブスクリプションに使用されるデリゲート インスタンスを次のように保存してください:
<code class="language-csharp">EventHandler handler = (s, e) => MessageBox.Show("Woho"); button.Click += handler; ... button.Click -= handler;</code>
イベント処理用のメソッドを抽出します
イベントを処理するもう 1 つの方法は、別のメソッドを抽出してイベント ハンドラーに割り当てることです。
<code class="language-csharp">public void ShowWoho(object sender, EventArgs e) { MessageBox.Show("Woho"); } ... button.Click += ShowWoho; ... button.Click -= ShowWoho;</code>
自己サブスクライブ解除された Lambda イベント ハンドラー
イベント ハンドラーが 1 回の呼び出し後に自身を削除する必要があるシナリオでは、より複雑なテクニックが必要です。
<code class="language-csharp">EventHandler handler = null; handler = (sender, args) => { button.Click -= handler; // 取消订阅 // 在此处添加您的单次代码 }; button.Click += handler;</code>
このメソッドは、最初にハンドラー変数に null 値を割り当てて、それを囲んでいるラムダ式がその値を変更できるようにすることに依存しています。
パッケージングチャレンジ
イベント ハンドラーをメソッドにカプセル化することは可能ですが、イベント表現が複雑なため、それが困難になる場合があります。より洗練されたバージョンでは、自動サブスクリプション解除機能を備えた専用の EventHandler を作成する必要がありますが、ジェネリック型パラメーターと正しいイベントのサブスクリプション解除が必要であるため、これは慎重に実装する必要があります。
以上がC# で Lambda イベント ハンドラーを効果的に削除するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。