Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Saya Boleh Menaikkan Peristiwa Diwarisi dengan betul dalam Kelas Terhasil C#?

Bagaimanakah Saya Boleh Menaikkan Peristiwa Diwarisi dengan betul dalam Kelas Terhasil C#?

Patricia Arquette
Patricia Arquetteasal
2024-12-24 11:48:15225semak imbas

How Can I Properly Raise Inherited Events in C# Derived Classes?

Menaikkan Peristiwa yang Diwarisi daripada Kelas Asas dalam C#

Dalam C#, adalah amalan biasa untuk mewarisi acara daripada kelas asas untuk memudahkan acara pengendalian dalam kelas terbitan. Walau bagaimanapun, menaikkan peristiwa yang diwarisi sedemikian memerlukan pendekatan khusus untuk mengelakkan ralat pengkompil.

Pertimbangkan senario di mana kelas asas mentakrifkan peristiwa berikut:

public class BaseClass
{
    public event EventHandler Loading;
    public event EventHandler Finished;
}

Dalam kelas terbitan, cuba meningkatkan acara Memuatkan menggunakan:

this.Loading(this, new EventHandler());

menghasilkan dalam ralat:

The event 'BaseClass.Loading' can only appear on the left hand side of += or -= (BaseClass')

Ralat ini berlaku kerana peristiwa, tidak seperti ahli kelas lain, tidak boleh dipanggil secara langsung oleh kelas terbitan. Sebaliknya, peristiwa yang diwarisi mesti dibangkitkan dengan menggunakan kaedah khusus yang ditakrifkan dalam kelas asas. Untuk mencapai matlamat ini, langkah-langkah berikut adalah perlu:

  1. Buat Kaedah Peningkatan Acara Terlindung dalam Kelas Asas:
    Tentukan kaedah yang dilindungi dalam kelas asas yang bertanggungjawab untuk membangkitkan peristiwa. Contohnya:
public class BaseClass
{
    public event EventHandler Loading;
    public event EventHandler Finished;

    protected virtual void OnLoading(EventArgs e)
    {
        EventHandler handler = Loading;
        if( handler != null )
        {
            handler(this, e);
        }
    }

    protected virtual void OnFinished(EventArgs e)
    {
        EventHandler handler = Finished;
        if( handler != null )
        {
            handler(this, e);
        }
    }
}
  1. Panggil Kaedah Peningkatan Peristiwa dalam Kelas Terbitan:
    Dalam kelas terbitan, bukannya menggunakan acara secara langsung, panggil yang sepadan kaedah penjanaan peristiwa yang ditakrifkan dalam kelas asas. Contohnya:
public class DerivedClass : BaseClass
{
    public void DoSomething()
    {
        // Raise Loading event
        OnLoading(EventArgs.Empty);

        // Raise Finished event
        OnFinished(EventArgs.Empty);
    }
}

Dengan mengikuti pendekatan ini, peristiwa yang diwarisi boleh dibangkitkan dengan selamat dan cekap dalam kelas terbitan dalam C#.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menaikkan Peristiwa Diwarisi dengan betul dalam Kelas Terhasil C#?. 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