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而用强制转换时就不会报,求解

解决方案 »

  1.   

    frm对象的CloseEvent事件已经被frm对象绑定了,不能再绑定给别人
      

  2.   

    _Main和你强制转换的frm对象是不是同一个对象?
      

  3.   

    不是的,frm是子窗口,_Main是父窗口
      

  4.   

    FormMain是子窗体?子窗体这样命名?
      

  5.   

    什么情况?
    我觉得你强制转换后frm和_Main是同一个对象
    而动态转换时不同对象,所以出现你说的这个问题
      

  6.   

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

  7.   

    这里是我曾经发过的一个帖子,是对dynamic的性能分析,你最好看看:慎用NET4.0新特性——dynamic
      

  8.   


    确实是这样的,我用MethodInfo解决了问题,谢谢这位大侠