C# イベントハンドラの削除
- イベントハンドラの追加の例
b.Click += new EventHandler(...);
- イベントハンドラの削除の例
b.Click -= new EventHandler(...);
かなり気持ちが悪い。newで作成したイベントハンドラを変数に格納して、追加と削除でその変数を呼び出していれば心も平穏になるというものだが。
newで作成される実体が、引数が同じなら常に同じと見なされる条件で演算されている、ということなのだろうか。
実のところ「イベントハンドラを追加する」ことは多々あっても、「削除する」ことはあんまりないような気がする。
しかし、Application.ApplicationExitイベントの説明で、「これは静的イベントなので、ApplicationExit イベント ハンドラ自体でこのイベントに結び付けられたすべてのイベント ハンドラの接続を解除する必要があります。これらのハンドラの接続を解除しない場合、それらはイベントに結び付いたまま、メモリを消費し続けます。」とあったので、さすがに気になってしまった。*1
Application.ApplicationExit Event (System.Windows.Forms) | Microsoft Docs
ちなみに、VisualStudio2003のマニュアルにはそんなことは書いてなかったので、その情報でアプリケーションを作ると、終了後に不要なイベントが残ることになったのかも。
でも、ApplicationExitイベントのハンドラはVisualStudioのGUIでは作成できないようなので、本来は使わないものなのかもしれない。*2