イベントを実装する場合、イベント ハンドラのコードを提供できadd
ますremove
。ただし、イベントには次の 3 つの方法でアクセスできます。
MyEvent += Handler; // add accessor
MyEvent -= Handler; // remove accessor
MyEvent(this, EventArgs.Empty); // not supported by an accessor
invoke
それを担当する別のアクセサが呼び出されることは明らかではないでしょうか? 私の考えは次のとおりです。
class BaseClass
{
public virtual event EventHandler MyEvent { add; remove; protected invoke; }
}
class DerivedClass : BaseClass
{
public override event EventHandler MyEvent
{
invoke
{
// new code before event
base.MyEvent(this, ...);
// new code after event
}
}
}
メソッドを実装する古いスタイルのパターンを知っています。OnMyEvent(...)
ただし、このアプローチには 2 つの重要な欠点があります。
- イベント コードが分散している -> コード ベースが整理されていない
- イベントを簡単にリファクタリングできない (名前を変更するなど)
編集:明らかに、コンパイラ チームはこの機能用に既に設計されています ( を参照GetRaiseMethod()
)。