Solução para remover o manipulador de eventos dinamicamente (usando reflexão). Existe uma maneira melhor de fazer isso?

Eu tive a necessidade de remover manipuladores de eventos de um controle carregado de uma dll que eu não tenho o código para. Como não parece haver um 'oficial' (isto é, suportado por métodos públicos do .NET Framework), fui capaz de criar alguns métodos de extensão que fizeram exatamente isso usando o Reflection.

Veja este blog para todos os detalhes:Removendo um evento de um controle ListView do WinForm usando reflexão

Aqui está um exemplo de código de como remover o evento SelectedIndexChanged (dinamicamente e sem acesso ao manipulador original)

//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

Minha pergunta é: "há outro caminho?"

Embora minha solução funcione e pareça estável, estou fazendo manipulação interna de objetos .NET, então talvez exista uma solução melhor (na versão 4.0 ou 4.5)?

Posts relacionados:

Como isso seria possível para remover todos os manipuladores de eventos do evento Click de um Button? - usa uma solução semelhante à minha, mas não acho que a solução funcione

questionAnswers(0)

yourAnswerToTheQuestion