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
Lepaskan: 2024-12-24 11:48:15
asal
226 orang telah melayarinya

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

Dalam kelas terbitan, cuba meningkatkan acara Memuatkan menggunakan:

this.Loading(this, new EventHandler());
Salin selepas log masuk

menghasilkan dalam ralat:

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

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

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!

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