2011-01-29 82 views
5

我想動態設置的自定義事件處理程序是這樣的僞代碼列表:如何設置事件處理動態地使用反射

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

我無法找到正確的語法,你可以?

回答

7

如何GetEvents而不是GetFields?

var t = something.GetType(); 

    var eventInfos = t.GetEvents(); 

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

我不能完全肯定的類型比較,但話又說回來,fieldInfo.Name不能在一個通用的那樣使用。

4

使用Type.GetEvents(),而不是GetFields()。然後您可以使用EventInfo.AddEventHandler()。