大家好!
       最近有一个程序要用到了反射,也就顺便看了一下反射方面的知识,有人说反射就是所谓的晚绑定
       然后开了一下 早绑定和晚绑定的区别       早绑定是明白了,实例化一个类对象,一般就被成为早绑定
       但是晚绑定有点问题, 说再实例化之前不知道对象的内部结构,  反射不也是实现这种功能吗? 反射前不知道程序集的内部结构
       
       我的问题是
       1.反射就是所谓的晚绑定吗?如果不是,那晚绑定是指什么呢?
       2.为什么要使用反射呢,我以前程序的功能是从一个DLL中读取方法,但是我直接添加对DLL的引用也行,为什么要使用反射呢?(分析一下什么地方使用反射,使用反射的好处)
       
                                                                                             谢谢大家赐教!
  

解决方案 »

  1.   

    举个例子,告诉你反射的好处:
        假设你做了一个类似于VISO的流程图软件,你做了矩形、圆形等类型,并且实现了它们的保存读取及展现。你把你的工作做成了控件,编译成dll给别人用。此时,别人觉得你的矩形画得不好看,要加上边框颜色的设置功能,然后他从你的矩形继承,写了一个支持颜色改变的矩形,并改写了序列化的方法。你做的控件如果要支持这种扩展就需要考虑一下了,因为当你的控件从文件读取文件后,就需要创建的支持颜色改变的矩形,而这个类并不在你的dll中,甚至你在做你的控件的时候都不知道它是否存在,更别说把它创建起来了。此时就只能在文件中记录好实现该矩形的程序集及类名,然后使用反射装载程序集并创建对象。
      

  2.   

    1. 反射是一种初级的晚绑定。在通过反射处理一个assembly的过程中,你是可以得到所有类型信息的,也就是说通过反射你应该可以获取绝大部分有用的Assembly信息——即元数据。高级的晚绑定应该是像DLR那样,写一个方法调用,至于运行时这个方法到底存在不存在,谁也不知道。Ruby之类的动态语言就是这么动态的。微软内部计划在将来的C#里面也加入这样的东西。2. 第二个问题LZ自己已经说了一点,反射不需要编译器加入引用,这样说明发布之后,我还可以替换掉那个反射进来的dll,这样可以使得软件自动更新之类非常好做,因为主框架的dll和exe都不用该,只用作为插件的dll就好了。这个就是反射一个很明显的好处。
      

  3.   

    软件的插件就是典型的使用反射来实现的。
    如大名鼎鼎的Eclipse!说白了,反射可以使你的软件更灵活!
      

  4.   

    1.   反射是一种初级的晚绑定。在通过反射处理一个assembly的过程中,你是可以得到所有类型信息的,也就是说通过反射你应该可以获取绝大部分有用的Assembly信息——即元数据。 高级的晚绑定应该是像DLR那样,写一个方法调用,至于运行时这个方法到底存在不存在,谁也不知道。Ruby之类的动态语言就是这么动态的。微软内部计划在将来的C#里面也加入这样的东西。 2.   第二个问题LZ自己已经说了一点,反射不需要编译器加入引用,这样说明发布之后,我还可以替换掉那个反射进来的dll,这样可以使得软件自动更新之类非常好做,因为主框架的dll和exe都不用该,只用作为插件的dll就好了。这个就是反射一个很明显的好处。