在物件導向程式設計中,類別從其基底類別繼承事件是很常見的。然而,引發這些繼承的事件可能會導致混亂。此問題解決了嘗試在衍生類別中引發繼承事件時遇到的錯誤,並提供了解決方案。
在定義如下的基底類別中:
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中文網其他相關文章!