日期:2014-05-17  浏览次数:20683 次

反射出的Form事件绑定问题

dynamic frm = Activator.CreateInstance(item, cache, BLID, nmrInfo.NAME);
//FormMain frm =(FormMain)Activator.CreateInstance(item,cache,BLID,nmrInfo.NAME);
_Main.OnCloseNmrEvent += new CloseNmrEvent(frm.CloseEvent);

我用dynamic时就会报


我不用dynamic而用强制转换时就不会报,求解。。。

------解决方案--------------------
frm对象的CloseEvent事件已经被frm对象绑定了,不能再绑定给别人
------解决方案--------------------
这是dynamic的局限性,它访问不到方法名,因为方法名本身不是有效的对象,之所以我们硬编码的时候可以使用它,因为编译时进行了特殊处理,但是dynamic是运行时才解析的,跳过了编译时处理这一步,因此最终检索不到它认为的有效对象。事实上,和方法有关的有效对象应该是MethodInfo,是通过反射才能得到的。