イベントは、実際には 1 つのデリゲートです。デリゲートは、実際には複数のコールバックをサポートしています。イベントものではありません。
イベントは、プロパティとよく似た方法で使用できます。プロパティには get/set があるのに対し、イベントには add/remove があります (通常、これは自動的に実装されます)。
private EventHandler<EventArgs> myEvent;
public event EventHandler<EventArgs> MyEvent
{
add
{
myEvent = (EventHandler<EventArgs>)Delegate.Combine(myEvent, value);
}
remove
{
myEvent = (EventHandler<EventArgs>)Delegate.Remove(myEvent, value);
}
}
イベントが発生すると、基本的にデリゲートが呼び出されます。そこにはあまり魔法はありません。
これが役立つことを願っています。CLR に組み込まれているため、イベントを呼び出すための実装が見つかるとは思いません。Monoソースを見ることができると言われました。