在C# 中引發從基類繼承的事件
在C# 中,從基類繼承事件以促進事件是常見的做法在派生類別中處理。但是,引發此類繼承事件需要採用特定方法來避免編譯器錯誤。
考慮基底類別定義以下事件的場景:
public class BaseClass { public event EventHandler Loading; public event EventHandler Finished; }
在衍生類別中,嘗試引發Loading 事件使用:
this.Loading(this, new EventHandler());
導致錯誤:
The event 'BaseClass.Loading' can only appear on the left hand side of += or -= (BaseClass')
This發生錯誤是因為事件與其他類別成員不同,不能由衍生類別直接呼叫。相反,繼承的事件必須透過呼叫基底類別中定義的特定方法來引發。為此,需要執行以下步驟:
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); } } }
public class DerivedClass : BaseClass { public void DoSomething() { // Raise Loading event OnLoading(EventArgs.Empty); // Raise Finished event OnFinished(EventArgs.Empty); } }
透過遵循這種方法,可以在 C# 的衍生類別中安全有效地引發繼承事件。
以上是如何在 C# 衍生類別中正確引發繼承事件?的詳細內容。更多資訊請關注PHP中文網其他相關文章!