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
Lepaskan: 2024-12-28 10:12:11
asal
750 orang telah melayarinya

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);
    }
}
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan