Rumah >pembangunan bahagian belakang >C++ >Bagaimana untuk Menyahlanggan daripada Pengendali Acara Lambda dalam C#?

Bagaimana untuk Menyahlanggan daripada Pengendali Acara Lambda dalam C#?

Barbara Streisand
Barbara Streisandasal
2025-01-20 09:46:09693semak imbas

How to Unsubscribe from Lambda Event Handlers in C#?

Alih keluar pengendali acara Lambda dalam C#

Dalam C#, ungkapan Lambda menyediakan cara ringkas untuk menentukan pengendali acara mudah. Contohnya, melanggan acara klik menggunakan ungkapan Lambda adalah sangat mudah:

<code class="language-csharp">button.Click += (s, e) => MessageBox.Show("Woho");</code>

Tetapi bagaimanakah saya boleh berhenti melanggan acara ini?

Gunakan perwakilan untuk menyahlanggan

Spesifikasi C# menyatakan bahawa ungkapan Lambda dan perwakilan tanpa nama tidak selalu menghasilkan perwakilan yang sama. Oleh itu, untuk memastikan penyahlangganan yang boleh dipercayai, anda boleh menjejaki contoh perwakilan yang digunakan secara eksplisit:

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

button.Click += handler;
...
button.Click -= handler;</code>

Gunakan kaedah bebas

Jika anda tidak mahu menggunakan perwakilan, anda boleh menentukan kaedah berasingan untuk pengendali acara:

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

...

button.Click += ShowWoho;
...
button.Click -= ShowWoho;</code>

Pengendali Lambda mengalih keluar sendiri

Jika anda ingin menggunakan ungkapan Lambda untuk membuat pengendali acara mengalih keluar sendiri, anda boleh merujuk perwakilan dalam ungkapan Lambda. Walau bagaimanapun, anda mesti menetapkan pembolehubah terlebih dahulu kepada null:

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

Gunakan kelas perwakilan untuk enkapsulasi

Adalah mungkin untuk merangkum fungsi penyingkiran diri ke dalam kelas perwakilan, tetapi ini mungkin lebih rumit disebabkan sifat abstrak acara:

<code class="language-csharp">button.Click += Delegates.AutoUnsubscribe<EventHandler>((sender, args) =>
{
    // 此处的单次执行代码
}, handler => button.Click -= handler);</code>

Atas ialah kandungan terperinci Bagaimana untuk Menyahlanggan daripada Pengendali Acara Lambda dalam C#?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn