« CLR Spy | Main | new EventHandler »

2005.08.15

Delegate の誤解 : 複数回の追加

delegate に複数回同じ event handler を追加しても無視される、と何かで読んだ気がしてずっとそう思っていましたが、.NET 2.0 で違う挙動に出会い、改めて調べたら、.NET 1.x でも追加した回数だけ呼ばれることが判明。やっぱり疑問はきちんと自分で解いておかないとだめだと反省。

class Program {
	static event EventHandler Handler;

	static void Main(string[] args) {
		Handler += new EventHandler(OnEvent);
		Handler += new EventHandler(OnEvent);
		Dump();
	}

	static void Dump() {
		if (Handler == null) {
			Console.WriteLine("Empty");
			return;
		}
		Console.WriteLine("# Handlers={0}",
			Handler.GetInvocationList().
			Length);
		Handler(null, EventArgs.Empty);
	}

	static void OnEvent(object sender, EventArgs e) {
		Console.WriteLine("OnEvent");
	}
}

結果は

# Handlers=2
OnEvent
OnEvent

しっかり 2 回呼ばれてしまいました。こう書けば安全か。

Handler -= new EventHandler(OnEvent);
Handler += new EventHandler(OnEvent);

|

« CLR Spy | Main | new EventHandler »

Comments

very interesting, thanks

Posted by: alcoke-online | 2010.07.13 at 06:49 PM

Post a comment



(Not displayed with comment.)




TrackBack

TrackBack URL for this entry:
http://app.cocolog-nifty.com/t/trackback/2111/5472275

Listed below are links to weblogs that reference Delegate の誤解 : 複数回の追加:

» new EventHandler [さすらいの .NET プログラマー]
Delegate の調査 ついでに長年の疑問を調べてみる気になった。 Handl [Read More]

Tracked on 2005.08.15 at 12:53 AM

« CLR Spy | Main | new EventHandler »