首頁 > 後端開發 > C++ > 如何在 C# 中正確引發繼承事件?

如何在 C# 中正確引發繼承事件?

DDD
發布: 2024-12-25 20:02:15
原創
777 人瀏覽過

How Can I Properly Raise Inherited Events in C#?

在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 -= 
登入後複製

出現此錯誤的原因事件不能像普通繼承成員那樣存取。若要從繼承類別引發事件,應使用下列方法:

  1. 在基底類別中,建立可用於引發事件的受保護方法。這些方法應使用前綴「On」後跟事件名稱來命名:
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);
    }
}
登入後複製
  1. 在從此基類繼承的類別中,可以呼叫 OnLoading 和 OnFinished方法來引發事件:
public class InheritedClass : BaseClass
{
    public void DoSomeStuff()
    {
        ...
        OnLoading(EventArgs.Empty);
        ...
        OnFinished(EventArgs.Empty);
    }
}
登入後複製

透過使用受保護的方法在基類中引發事件,您可以確保事件處理程序從派生類別正確調用,同時保持事件引發機制的封裝。

以上是如何在 C# 中正確引發繼承事件?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板