2

.NET Framework の現在のバージョンでは、通常の状況 (つまり、呼び出しリストを意図的に変更していない場合) では、イベントのハンドラーは常に登録された順序で呼び出されますか? これは、イベントが実装されるマルチキャスト デリゲートの文書化された動作と一致します。

この質問に対する受け入れられた回答は、ハンドラーを登録順に呼び出すことは、フレームワークの将来のバージョンで変更される可能性がある実装の詳細であると述べています。Microsoft によるそのような変更はありそうもないので、質問を現在のバージョンの .NET フレームワークに限定しています。その同じ回答に対するコメントは、登録順序で呼び出されないようにハンドラーを登録することが可能であると述べています。これが正しい場合、この順不同で実行されるコードを示してください。呼び出しリストを意図的に変更するコードを含めないでください。ここで私が求めているのは、現在のすべてのバージョンの .NET フレームワークで登録と同じ順序でイベント ハンドラーの呼び出しが発生することに依存できるかどうかです。

4

2 に答える 2

0

それは、イベントの実装方法によって異なります。

通常の (フィールドのような) イベントは、すべてのハンドラーを単一のマルチキャスト デリゲートに格納します。
マルチキャスト デリゲートは、ハンドラーを挿入順に呼び出します。

他のイベントは、ハンドラーを他の順序で自由に保存できます。ただし、ほとんどの非標準の実装では、さまざまな方法で格納されたマルチキャスト デリゲートが隠れて使用されています (例: EventHandlerList) 。

于 2013-07-15T15:07:55.043 に答える