Invokasi Peristiwa Tersuai dalam Kelas Diwarisi
Dalam pengaturcaraan berorientasikan objek, pewarisan membenarkan kelas terbitan untuk mewarisi sifat dan gelagat daripada kelas asas. Walau bagaimanapun, aspek tertentu ahli yang diwarisi mungkin memerlukan pengendalian khas.
Dalam kes ini, kami mempunyai kelas asas dengan dua peristiwa, Memuatkan dan Selesai, yang mencetuskan pemberitahuan apabila tindakan tertentu berlaku. Apabila cuba menaikkan peristiwa ini dalam kelas yang diwarisi, ralat ditemui.
Sebab ralat ini ialah peristiwa bukan kaedah semata-mata; mereka adalah perwakilan yang merangkum senarai pengendali acara yang dilanggan. Dalam kelas yang diwarisi, pengkompil mengharapkan anda mengakses perwakilan acara itu sendiri, dan bukannya memanggilnya secara terus.
Untuk menangani perkara ini, kami perlu mencipta kaedah yang dilindungi dalam kelas asas yang merangkum seruan acara. Kaedah ini, yang dinamakan OnLoading dan OnFinished, akan menyemak sama ada mana-mana pengendali acara telah didaftarkan dan menggunakan kaedah tersebut dengan sewajarnya.
Dalam kelas yang diwarisi, kami kemudiannya boleh memanggil kaedah yang dilindungi ini untuk menaikkan acara. Dengan berbuat demikian, kami memastikan bahawa pemberitahuan acara disebarkan dengan betul kepada semua pengendali yang melanggan. Berikut ialah contoh:
// Base class public class BaseClass { public event EventHandler Loading; public event EventHandler Finished; protected virtual void OnLoading(EventArgs e) { Loading?.Invoke(this, e); } protected virtual void OnFinished(EventArgs e) { Finished?.Invoke(this, e); } } // Derived class public class DerivedClass : BaseClass { public void DoSomething() { ... OnLoading(EventArgs.Empty); ... OnFinished(EventArgs.Empty); } }
Dengan mengikuti pendekatan ini, kami boleh berjaya menaikkan acara yang diwarisi dalam kelas terbitan dan memastikan pengendali acara yang dilanggan dimaklumkan dengan sewajarnya.
Atas ialah kandungan terperinci Bagaimanakah Saya Menggunakan Peristiwa Warisan dalam Kelas Terbitan dengan Betul?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!