Solución para eliminar el controlador de eventos dinámicamente (utilizando la reflexión). ¿Hay una mejor manera de hacer esto?

Tuve la necesidad de eliminar los controladores de eventos de un control cargado desde una dll para la que no tengo el código. Dado que no parece haber un "oficial" (es decir, con el apoyo de métodos públicos de .NET Framework), pude crear un par de métodos de extensión que hacían exactamente eso utilizando Reflection.

Ver esta publicación del blog para todos los detalles:Eliminar un evento de un control WinForm ListView usando la reflexión

Aquí hay un ejemplo de código de cómo eliminar el evento SelectedIndexChanged (dinámicamente y sin acceso al controlador 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

Mi pregunta es: "¿hay otra manera?"

Aunque mi solución funciona y parece estable, estoy haciendo manipulación interna de objetos .NET, ¿entonces tal vez hay una solución mejor (en 4.0 o 4.5)?

Artículos Relacionados:

¿Cómo sería posible eliminar todos los controladores de eventos del evento Click de un botón? - utiliza una solución similar a la mía, pero no creo que su solución funcione

Respuestas a la pregunta(0)

Su respuesta a la pregunta