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

派生クラスで継承されたイベントを適切に呼び出すにはどうすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-12-28 10:12:11746ブラウズ

How Do I Properly Invoke Inherited Events in Derived Classes?

継承クラスでのカスタム イベント呼び出し

オブジェクト指向プログラミングでは、継承により派生クラスが基本クラスからプロパティと動作を継承できます。ただし、継承されたメンバーの特定の側面には特別な処理が必要な場合があります。

この場合、特定のアクションが発生したときに通知をトリガーする 2 つのイベント (Loading と Finished) を持つ基本クラスがあります。継承されたクラスでこれらのイベントを発生させようとすると、エラーが発生します。

このエラーの理由は、イベントが単なるメソッドではないためです。これらは、サブスクライブされたイベント ハンドラーのリストをカプセル化するデリゲートです。継承されたクラスでは、コンパイラはイベント デリゲートを直接呼び出すのではなく、イベント デリゲート自体にアクセスすることを期待します。

これに対処するには、イベントの呼び出しをカプセル化する保護されたメソッドを基本クラスに作成する必要があります。 OnLoading および OnFinished という名前のこれらのメソッドは、イベント ハンドラーが登録されているかどうかを確認し、それらを適切に呼び出します。

継承されたクラスで、これらの保護されたメソッドを呼び出してイベントを発生させることができます。そうすることで、イベント通知がすべてのサブスクライブされたハンドラーに正しく伝播されるようになります。以下に例を示します。

// Base class
public class BaseClass
{
    public event EventHandler Loading;
    public event EventHandler Finished;

    protected virtual void OnLoading(EventArgs e)
    {
        Loading?.Invoke(this, e);
    }

    protected virtual void OnFinished(EventArgs e)
    {
        Finished?.Invoke(this, e);
    }
}

// Derived class
public class DerivedClass : BaseClass
{
    public void DoSomething()
    {
        ...
        OnLoading(EventArgs.Empty);
        ...
        OnFinished(EventArgs.Empty);
    }
}

このアプローチに従うことで、派生クラスで継承されたイベントを正常に発生させ、サブスクライブされたイベント ハンドラーに適切に通知されるようにすることができます。

以上が派生クラスで継承されたイベントを適切に呼び出すにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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