Решение для удаления обработчика событий динамически (с использованием отражения). Есть лучший способ сделать это?

Мне нужно было удалить обработчики событий из элемента управления, загруженного из DLL, для которого у меня нет кода. Поскольку, похоже, не существует "официального" (т.е. Поддерживается общедоступными методами .NET Framework), мне удалось создать несколько методов расширения, которые выполнялись именно с использованием Reflection.

Смотрите эту запись в блоге для всех деталей: Удаление события из элемента управления ListView WinForm с использованием отражения

Вот пример кода, как удалить событие SelectedIndexChanged (динамически и без доступа к исходному обработчику)

//for a UserControl (in fact any control that implements System.ComponentModel.Component)
var userControl = new UserControl();
//we can get the current mapped event handlers
userControl.eventHandlers();
//its signature
userControl.eventHandlers_MethodSignatures();
//remove one by using the static field name
userControl.remove_EventHandler("EVENT_SELECTEDINDEXCHANGED");
//or use this one specifically mapped to the SelectedIndexChanged event
userControl.remove_Event_SelectedIndexChanged

Мой вопрос: "Есть ли другой способ?"

Хотя мое решение работает и кажется стабильным, я делаю внутренние манипуляции с объектами .NET, поэтому, возможно, есть лучшее решение (в 4.0 или 4.5)?

Похожие сообщения: