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

如何在 C# 衍生類別中正確引發繼承事件?

Patricia Arquette
發布: 2024-12-24 11:48:15
原創
250 人瀏覽過

How Can I Properly Raise Inherited Events in C# Derived Classes?

在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發生錯誤是因為事件與其他類別成員不同,不能由衍生類別直接呼叫。相反,繼承的事件必須透過呼叫基底類別中定義的特定方法來引發。為此,需要執行以下步驟:

  1. 在基類中建立受保護的事件引發方法:
    在基類中定義負責的受保護方法引發事件。例如:
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);
        }
    }
}
登入後複製
  1. 在衍生類別中呼叫事件引發方法:
    在衍生類別中,不要直接呼叫事件,而是呼叫對應的方法基底類別中定義的事件引發方法。例如:
public class DerivedClass : BaseClass
{
    public void DoSomething()
    {
        // Raise Loading event
        OnLoading(EventArgs.Empty);

        // Raise Finished event
        OnFinished(EventArgs.Empty);
    }
}
登入後複製

透過遵循這種方法,可以在 C# 的衍生類別中安全有效地引發繼承事件。

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

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