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