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

Bagaimanakah Saya Boleh Menaikkan Peristiwa Diwarisi dengan Betul dalam C#?

DDD
DDDasal
2024-12-25 20:02:15783semak imbas

How Can I Properly Raise Inherited Events in C#?

Meningkatkan Peristiwa Warisan dalam C#

Apabila bekerja dengan warisan dalam C#, adalah penting untuk memahami cara mengakses dan meningkatkan acara yang diisytiharkan dengan betul dalam kelas asas.

Andaikan anda mempunyai kelas asas dengan acara berikut ditakrifkan:

public event EventHandler Loading;
public event EventHandler Finished;

Dalam kelas yang mewarisi daripada kelas asas ini, anda mungkin menghadapi ralat semasa cuba menaikkan acara ini secara langsung, seperti:

this.Loading(this, new EventHandler()); // Error: The event 'BaseClass.Loading' can only appear on the left hand side of += or -= 

Ralat ini berlaku kerana acara tidak boleh diakses seperti ahli yang diwarisi biasa. Untuk menaikkan acara daripada kelas yang diwarisi, pendekatan berikut harus digunakan:

  1. Dalam kelas asas, cipta kaedah dilindungi yang boleh digunakan untuk menaikkan acara. Kaedah ini harus dinamakan menggunakan awalan "Hidup" diikuti dengan nama acara:
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. Dalam kelas yang mewarisi daripada kelas asas ini, kaedah OnLoading dan OnFinished boleh dipanggil ke raise the events:
public class InheritedClass : BaseClass
{
    public void DoSomeStuff()
    {
        ...
        OnLoading(EventArgs.Empty);
        ...
        OnFinished(EventArgs.Empty);
    }
}

Dengan menggunakan kaedah yang dilindungi untuk menaikkan acara dalam kelas asas, anda boleh memastikan bahawa pengendali acara digunakan dengan betul daripada kelas terbitan sambil mengekalkan pengkapsulan mekanisme penjanaan acara.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menaikkan Peristiwa Diwarisi dengan Betul dalam 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