Я надеюсь прояснить некоторые вещи с помощью анонимных делегатов и лямбда-выражений, используемых для создания метода для обработчиков событий на 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();
}
Но мне интереснее просто удалить из события динамически созданный метод. Надеюсь, кто-нибудь сможет пролить свет на это для меня. Спасибо!