オブジェクトをnullに設定すると、オブジェクトのイベントに関連付けられているすべてのイベントハンドラがクリーンアップされるかどうかと思いました...
gt;
Button button = new Button();
button.Click += new EventHandler(Button_Click);
button = null;
button = new Button();
button.Click += new EventHandler(Button_Click);
button = null;
等...
これによりメモリリークが発生しますか?
他に参照がない場合button
どこでも、メモリリークを避けるためにイベントハンドラをここで削除する必要はありません。イベントハンドラは一方向の参照なので、イベントハンドラはイベントを含むオブジェクトが長命である場合にのみ必要です。ハンドラー(つまり、ハンドラメソッドを持つオブジェクト)は、本来よりも長く生きることができません。あなたの例では、これは事実ではありません。
概要:イベントのソース/発行者が長持ちし、購読者がそうでない場合は、明示的に購読を中止する必要があります。イベントソースが購読者よりも古くなった場合、登録解除されない限り(およびイベント発行者の通知リストから自分自身への参照を削除するまで)、登録されたすべての購読者はイベントソースによって「生存」されます。
またこれはの複製ですC#でイベントハンドラを明示的に削除する必要がありますかそして良いタイトルnの答えを持っています。だから投票を終了する。
ディスカッションを見る「最後の質問:イベントハンドラを削除する必要がありますか」の下にあります。
結論:あなたは削除する必要があります イベントが到着したときにイベントから代理 クラス自体の外側すなわちいつ あなたは外部のイベントを購読しています、あなたは あなたはあなたの購読を終了するべきです 完了です。そうしなくても維持されます あなたのオブジェクトは 必要。