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 -=
このエラーが発生する理由は次のとおりです。イベントには、通常の継承されたメンバーのようにアクセスできません。継承されたクラスからイベントを発生させるには、次のアプローチを使用する必要があります。
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); } }
public class InheritedClass : BaseClass { public void DoSomeStuff() { ... OnLoading(EventArgs.Empty); ... OnFinished(EventArgs.Empty); } }
保護されたメソッドを使用して基本クラスでイベントを発生させることにより、イベント ハンドラーがイベント発生メカニズムのカプセル化を維持しながら、派生クラスから適切に呼び出されます。
以上がC# で継承されたイベントを適切に発生させるにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。