如何动态地使用反射设置事件处理程序 [英] How to set an event handler dynamically using Reflection

查看:112
本文介绍了如何动态地使用反射设置事件处理程序的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想动态设置的自定义事件处理程序是这样的伪code列表:

I'd like to dynamically set a list of custom event handlers something like this in pseudo-code:

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

我找不到正确的语法可以吗?

I can't find the right syntax can you ?

推荐答案

如何GetEvents而不是GetFields?

How about GetEvents instead of 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 不能在一个通用的那样使用。

I'm not totally sure about the type-comparison, but then again, fieldInfo.Name can't be used in a generic like that.

这篇关于如何动态地使用反射设置事件处理程序的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆