JetBrains Rider 2026.1 Help

コードインスペクション: ポリモーフィックなフィールドのようなイベントの呼び出し

次のコードを考えてみましょう。

public class Base { public virtual event EventHandler MyEvent; } public class Derived : Base { public override event EventHandler MyEvent; public void SomeMethod() { var args = ...; MyEvent(this, args); } }

上記のコードブロックは、オーバーライドイベント宣言を使用して、イベントに対する add メソッドと remove メソッドの実装をオーバーライドします。 フィールド自体は、 BaseDerived の 2 つの別々のインスタンスに存在します。 その結果、 Derived で作業する場合、明示的に値を設定しない限り、 BaseMyEvent をインスタンス化することはありません。 その結果、基本クラスでイベントが発生した場合の動作は、派生クラスのイベントと異なります。

上記の状況を解決する最も簡単な方法は、オーバーライドを削除し、代わりに基本クラスでイベント起動メソッドを作成することです。 例えば:

public class Base { public event EventHandler MyEvent; public void FireMyEvent(object sender, EventArgs args) { var e = MyEvent; if (e != null) e(sender, args); } } public class Derived { public void SomeMethod() { var args = ...; FireMyEvent(this, args); } }
2026 年 6 月 12 日