イベント処理中にイベントハンドラを削除したらどうなるか
さて問題です。次のコードを実行すると、コンソールには何が表示されるでしょう?もっと言うと、コンソールに "Handler2" は表示されるでしょうか、表示されないのでしょうか。
using System; class Foo { static event EventHandler Event; static void Main() { Event += Handler1; Event += Handler2; Event( null, null ); } static void Handler1( object sender, EventArgs e ) { Console.WriteLine( "Handler1" ); Event -= Handler2; } static void Handler2( object sender, EventArgs e ) { Console.WriteLine( "Handler2" ); } }
答え:
Handler1 Handler2
と表示されます。Handler1() でイベントから Handler2() を削除しているのに、Handler2() は呼び出されるんですな。
・・・え?当たり前だって?そうですか、ハマった私が無知なだけですか・・・orz