Alih keluar pengendali acara Lambda dalam C#
dengan berkesanEkspresi Lambda menyediakan cara ringkas dan berkuasa untuk mengendalikan acara dalam C#. Walau bagaimanapun, mengalih keluar pengendali acara Lambda memerlukan pemahaman yang lebih mendalam tentang mekanisme EventHandler yang mendasari.
Pastikan keunikan delegasi
Spesifikasi C# membenarkan berbilang contoh perwakilan dibuat daripada ungkapan Lambda yang sama. Ini boleh menyebabkan masalah apabila cuba menyahlanggan pengendali. Untuk mengelakkan kekeliruan, pastikan anda menyimpan contoh perwakilan yang digunakan untuk langganan, seperti ini:
<code class="language-csharp">EventHandler handler = (s, e) => MessageBox.Show("Woho"); button.Click += handler; ... button.Click -= handler;</code>
Kaedah ekstrak untuk pengendalian acara
Cara lain untuk mengendalikan acara ialah dengan mengekstrak kaedah berasingan dan menyerahkannya kepada pengendali acara:
<code class="language-csharp">public void ShowWoho(object sender, EventArgs e) { MessageBox.Show("Woho"); } ... button.Click += ShowWoho; ... button.Click -= ShowWoho;</code>
Pengendali acara Lambda yang dinyahlanggan sendiri
Untuk senario di mana pengendali acara harus mengalih keluar dirinya selepas satu panggilan, teknik yang lebih kompleks diperlukan:
<code class="language-csharp">EventHandler handler = null; handler = (sender, args) => { button.Click -= handler; // 取消订阅 // 在此处添加您的单次代码 }; button.Click += handler;</code>
Kaedah ini bergantung pada pada mulanya memberikan nilai nol kepada pembolehubah pengendali untuk memastikan bahawa ungkapan lambda yang disertakan boleh mengubah suai nilainya.
Cabaran Pembungkusan
Walaupun mungkin untuk merangkum pengendali acara dalam kaedah, kerumitan perwakilan acara boleh menjadikannya mencabar. Versi yang lebih elegan akan melibatkan penciptaan EventHandler khusus dengan fungsi penyahlangganan automatik, tetapi ini perlu dilaksanakan dengan berhati-hati kerana parameter jenis generik dan penyahlangganan acara yang betul diperlukan.
Atas ialah kandungan terperinci Bagaimana untuk Mengeluarkan Pengendali Acara Lambda dengan Berkesan dalam C#?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!