繼承類別中的自訂事件呼叫
在物件導向程式設計中,繼承允許衍生類別從基底類別繼承屬性和行為。但是,繼承成員的某些方面可能需要特殊處理。
在這種情況下,我們有一個包含兩個事件的基底類別: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中文網其他相關文章!