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

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

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-12-28 10:12:11751瀏覽

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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn