継承クラスでのカスタム イベント呼び出し
オブジェクト指向プログラミングでは、継承により派生クラスが基本クラスからプロパティと動作を継承できます。ただし、継承されたメンバーの特定の側面には特別な処理が必要な場合があります。
この場合、特定のアクションが発生したときに通知をトリガーする 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 サイトの他の関連記事を参照してください。