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

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

Linda Hamilton
Linda Hamilton原創
2024-12-25 16:03:10362瀏覽

How to Correctly Raise Inherited Events in C# Derived Classes?

在 C 中引發繼承事件

在物件導向程式設計中,類別從其基底類別繼承事件是很常見的。然而,引發這些繼承的事件可能會導致混亂。此問題解決了嘗試在衍生類別中引發繼承事件時遇到的錯誤,並提供了解決方案。

問題

在定義如下的基底類別中:

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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn