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

如何在衍生類別中正確呼叫繼承事件?

Mary-Kate Olsen
發布: 2024-12-28 10:12:11
原創
771 人瀏覽過

How Do I Properly Invoke Inherited Events in Derived Classes?

繼承類別中的自訂事件呼叫

在物件導向程式設計中,繼承允許衍生類別從基底類別繼承屬性和行為。但是,繼承成員的某些方面可能需要特殊處理。

在這種情況下,我們有一個包含兩個事件的基底類別:Loading 和 Finished,它們在發生特定操作時觸發通知。當嘗試在繼承類別中引發這些事件時,會遇到錯誤。

此錯誤的原因是事件不只是方法;而是事件。它們是封裝了訂閱事件處理程序清單的委託。在繼承的類別中,編譯器希望您存取事件委託本身,而不是直接呼叫它。

為了解決這個問題,我們需要在基底類別中建立封裝事件呼叫的受保護方法。這些名為 OnLoading 和 OnFinished 的方法將檢查是否註冊了任何事件處理程序並適當地呼叫它們。

在繼承的類別中,我們可以呼叫這些受保護的方法來引發事件。透過這樣做,我們確保事件通知正確傳播到所有訂閱的處理程序。以下是一個範例:

// 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);
    }
}
登入後複製

透過遵循這個方法,我們可以成功地在衍生類別中引發繼承事件,並確保訂閱的事件處理程序得到適當的通知。

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

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