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

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

Patricia Arquette
リリース: 2024-12-24 11:48:15
オリジナル
225 人が閲覧しました

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

C# の基本クラスから継承されたイベントの発生

C# では、イベントを容易にするために基本クラスからイベントを継承するのが一般的です。派生クラスでの処理。ただし、このような継承されたイベントを発生させるには、コンパイラ エラーを回避するための特定のアプローチが必要です。

基本クラスが次のイベントを定義するシナリオを考えてみましょう。

public class BaseClass
{
    public event EventHandler Loading;
    public event EventHandler Finished;
}
ログイン後にコピー

派生クラスで発生させようとすると、

this.Loading(this, new EventHandler());
ログイン後にコピー

を使用した Loading イベントの結果は、 error:

The event 'BaseClass.Loading' can only appear on the left hand side of += or -= (BaseClass')
ログイン後にコピー

このエラーは、他のクラス メンバーとは異なり、派生クラスによってイベントを直接呼び出すことができないために発生します。代わりに、継承されたイベントは、基本クラスで定義された特定のメソッドを呼び出して発生させる必要があります。これを実現するには、次の手順が必要です。

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

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート