ホームページ > バックエンド開発 > C++ > C# で Lambda イベント ハンドラーを効果的に削除するにはどうすればよいですか?

C# で Lambda イベント ハンドラーを効果的に削除するにはどうすればよいですか?

Patricia Arquette
リリース: 2025-01-20 09:31:09
オリジナル
981 人が閲覧しました

How to Effectively Remove Lambda Event Handlers in C#?

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート