ホームページ >バックエンド開発 >C++ >C# で継承されたイベントを適切に発生させるにはどうすればよいですか?

C# で継承されたイベントを適切に発生させるにはどうすればよいですか?

DDD
DDDオリジナル
2024-12-25 20:02:15777ブラウズ

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 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。