Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Saya Menggunakan Peristiwa Warisan dalam Kelas Terbitan dengan Betul?

Bagaimanakah Saya Menggunakan Peristiwa Warisan dalam Kelas Terbitan dengan Betul?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-12-28 10:12:11751semak imbas

How Do I Properly Invoke Inherited Events in Derived Classes?

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!

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