2011-01-29 13 views
5

me gustaría establecer dinámicamente una lista de controladores de eventos personalizados algo como esto en pseudo-código:Cómo configurar un controlador de eventos dinámicamente utilizando la reflexión

FieldInfo[] fieldInfos = this.GetType().GetFields(
    BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly); 

foreach (FieldInfo fieldInfo in fieldInfos) 
{ 
    if this.fieldInfo.GetType() = TypeOf(CustomEventHandler<this.fieldInfo.Name>) { 
     this.fieldInfo.Name += new CustomEventHandler<this.fieldInfo.Name>(OnChange<this.fieldInfo.Name>); 
    } 
} 

no puedo encontrar la sintaxis correcta puede usted ?

Respuesta

7

¿Qué tal GetEvents en lugar de GetFields?

var t = something.GetType(); 

    var eventInfos = t.GetEvents(); 

    foreach (var info in eventInfos) 
    { 
     if (info.EventHandlerType == TypeOf(CustomEventHandler<this.fieldInfo.Name>) 
       info.AddEventHandler(...);     
    } 

no estoy totalmente seguro sobre el tipo de comparación, pero por otra parte, fieldInfo.Name no se pueden utilizar en un genérico por el estilo.

4

Use Type.GetEvents(), no GetFields(). Luego puede usar EventInfo.AddEventHandler().

Cuestiones relacionadas