匿名のデリゲートとラムダ式を使用して C# でイベント ハンドラーのメソッドを作成することで、少なくとも私自身は解決したいと思っています。
匿名デリゲートまたはラムダ式のいずれかを追加するイベントがあるとします (新しいバージョンの .NET を使用できる幸運な人々のために)。
SomeClass.SomeEvent += delegate(object o, EventArg e) { /* do something */ };
クラスがガベージ コレクションされるのを防ぐハンドラーがまだあるイベントについて、過去の人々が忘れていることを読んだことがあります。クラス内で SomeEvent を null に設定するだけでなく、追加されたハンドラーを削除するにはどうすればよいでしょうか。以下はまったく新しいハンドラではないでしょうか?
SomeClass.SomeEvent -= delegate(object o, EventArg e) { /* do something */ };
匿名デリゲートまたはラムダ式を変数に格納することがわかりました。しかし、少なくとも私には、イベント ハンドラーを簡単かつ簡潔に追加できるようにするという目的全体が無効になっているように思えます。
SomeEventDelegate handler = new SomeEventDelegate(delegate(object o, EventArg e) { /* do something */ });
SomeClass.SomeEvent += handler;
// ... stuff
SomeClass.SomeEvent -= handler;
繰り返しますが、私はあなたができることを理解しています...
public override Dispose(bool disposing)
{
_someEvent = null;
this.Dispose();
}
しかし、イベントから動的に作成されたメソッドを削除するだけで、より興味深いものになります。うまくいけば、誰かが私のためにこれに光を当てることができます. ありがとう!