Я надеюсь прояснить некоторые вещи с анонимными делегатами и лямбда-выражениями, которые используются для создания метода обработчиков событий в С#; для меня как минимум.
Предположим, что у нас есть событие, которое добавляет анонимный делегат или выражение лямбда [для вас, счастливые толпы, которые могут использовать более новые версии .NET).
SomeClass.SomeEvent += delegate(object o, EventArg e) { //do something };
Я читал, что люди в прошлом забыли о событиях, которые по-прежнему имеют обработчики, которые мешают сбору мусора. Как можно было бы удалить добавленный обработчик, просто не установив SomeEvent в null в классе. Не будет ли это совсем новым обработчиком?
SomeClass.SomeEvent -= delegate(object o, EventArg e) { //do same thing };
Я мог видеть сохранение анонимного выражения делегата/лямбда в переменной, но это, по крайней мере, для меня, по-видимому, лишает всю цель возможности просто и лаконично добавить обработчик событий.
SomeEventDelegate handler = new SomeEventDelegate(delegate(object o, EventArg e) { //do same thing });
SomeClass.SomeEvent += handler;
//... stuff
SomeClass.SomeEvent -= handler;
Опять же, я понимаю, что вы могли бы просто сделать...
public override Dispose(bool disposing)
{
_someEvent = null;
this.Dispose();
}
Но мне интереснее просто удалить динамически созданный метод из Event. Надеюсь, кто-то может пролить свет на это для меня. Спасибо!