在C# 中引發繼承事件
在C# 中使用繼承時,了解如何正確訪問和引發已聲明的事件非常重要在基類中。
假設您有一個包含以下事件的基類定義:
public event EventHandler Loading; public event EventHandler Finished;
在繼承自該基類的類中,嘗試直接引發這些事件時可能會遇到錯誤,例如:
this.Loading(this, new EventHandler()); // Error: The event 'BaseClass.Loading' can only appear on the left hand side of += or -=
出現此錯誤的原因事件不能像普通繼承成員那樣存取。若要從繼承類別引發事件,應使用下列方法:
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 InheritedClass : BaseClass { public void DoSomeStuff() { ... OnLoading(EventArgs.Empty); ... OnFinished(EventArgs.Empty); } }
透過使用受保護的方法在基類中引發事件,您可以確保事件處理程序從派生類別正確調用,同時保持事件引發機制的封裝。
以上是如何在 C# 中正確引發繼承事件?的詳細內容。更多資訊請關注PHP中文網其他相關文章!