Как установить обработчик событий динамически, используя Reflection - PullRequest
5 голосов
/ 29 января 2011

Я бы хотел динамически установить список пользовательских обработчиков событий примерно так в псевдокоде:

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

Не могу найти правильный синтаксис, не так ли?

Ответы [ 2 ]

7 голосов
/ 29 января 2011

Как насчет 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 голосов
/ 29 января 2011

Используйте Type.GetEvents (), а не GetFields ().Затем вы можете использовать EventInfo.AddEventHandler ().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...