2011-01-29 12 views
5

mi piacerebbe impostare dinamicamente un elenco dei gestori di eventi personalizzati qualcosa di simile in pseudo-codice:Come impostare un gestore di eventi utilizzando in modo dinamico Riflessione

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>); 
    } 
} 

non riesco a trovare la giusta sintassi può voi ?

risposta

7

Informazioni su GetEvents anziché GetFields?

var t = something.GetType(); 

    var eventInfos = t.GetEvents(); 

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

io non sono del tutto sicuri del tipo di confronto, ma poi di nuovo, fieldInfo.Name non possono essere utilizzati in un generico del genere.

4

Utilizzare Type.GetEvents(), non GetFields(). È quindi possibile utilizzare EventInfo.AddEventHandler().

Problemi correlati