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:
button.Click += (s, e) => MessageBox.Show("Woho");
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:
EventHandler handler = (s, e) => MessageBox.Show("Woho"); button.Click += handler; ... button.Click -= handler;
Gunakan kaedah bebas
Jika anda tidak mahu menggunakan perwakilan, anda boleh menentukan kaedah berasingan untuk pengendali acara:
public void ShowWoho(object sender, EventArgs e) { MessageBox.Show("Woho"); } ... button.Click += ShowWoho; ... button.Click -= ShowWoho;
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:
EventHandler handler = null; handler = (sender, args) => { button.Click -= handler; // 取消订阅 // 在此处添加您的单次执行代码 }; button.Click += handler;
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:
button.Click += Delegates.AutoUnsubscribe<EventHandler>((sender, args) => { // 此处的单次执行代码 }, handler => button.Click -= handler);
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!