首頁 > 後端開發 > C++ > 如何在 C# 衍生類別中正確引發繼承事件?

如何在 C# 衍生類別中正確引發繼承事件?

Linda Hamilton
發布: 2024-12-25 16:03:10
原創
313 人瀏覽過

How to Correctly Raise Inherited Events in C# Derived Classes?

在 C 中引發繼承事件

在物件導向程式設計中,類別從其基底類別繼承事件是很常見的。然而,引發這些繼承的事件可能會導致混亂。此問題解決了嘗試在衍生類別中引發繼承事件時遇到的錯誤,並提供了解決方案。

問題

在定義如下的基底類別中:

public class BaseClass
{
    public event EventHandler Loading;
    public event EventHandler Finished;
}
登入後複製

派生類別嘗試引發繼承的事件:

public class DerivedClass : BaseClass
{
    // Error: 'BaseClass.Loading' can only appear on the left hand side of += or -=
    this.Loading(this, new EventHandler());
}
登入後複製

此錯誤表示無法直接使用該事件存取

解決方案

要引發繼承事件,您需要在基底類別中定義受保護的方法來處理事件呼叫。這些方法允許即使派生類別重寫事件時也可以引發事件。

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);
    }

    // Invoking the events from the derived class
    public class DerivedClass : BaseClass
    {
        public void RaiseLoadingEvent()
        {
            OnLoading(EventArgs.Empty);
        }

        public void RaiseFinishedEvent()
        {
            OnFinished(EventArgs.Empty);
        }
    }
}
登入後複製

透過在衍生類別中呼叫 OnLoading 或 OnFinished,將呼叫基底類別中訂閱事件的處理程序,確保衍生類別中正確的事件處理。

以上是如何在 C# 衍生類別中正確引發繼承事件?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板