イベントの処理順は保障されていない
プログラミングC# 第6版 5.8
追加した順序と同じ順序でイベントハンドラが実行されていることに気付かれたかもしれません。しかし常に順序が同じになることは保障されていないので、この挙動に依存したコードを作成してはいけません。
なるほど、つまり以下のような処理が
using System; class CClass { public event EventHandler Begin; public void Proc () { if ( Begin != null ) { Begin(this,EventArgs.Empty); } Console.WriteLine("CClass.Proc"); } } class Program { static void Main () { CClass cobj = new CClass(); cobj.Begin += (sender,e) => Console.WriteLine("1"); cobj.Begin += (sender,e) => Console.WriteLine("2"); cobj.Begin += (sender,e) => Console.WriteLine("3"); cobj.Proc(); } }
$ main 1 2 3
このように1,2,3と必ず表示されるとは限らないってことですね。
普通に考えたら設定した順序に呼ばれそうと思ってしまうのでこれは注意が必要ですね。覚えておきます。