反射和右键添加引用都可以实现对程序集里的方法的调用,那有什么区别吗?

解决方案 »

  1.   

    代码里调用哪个方法,应该是已经知道了吧,为什么要运行时调用DLL?请高手解释
      

  2.   

    如果是引用的方式,前期就知道.
    如果是反射的方式,后期才知道.为什么运行是要调用DLL? 别人开发的第三方的程式,你没有源代码,而别人也是在DLL中提供了接口供你调用,你当然只能调用DLL,这样别人可以将内部代码隐藏,保护,将内部实现隐藏(代码).
    你自己写的DLL也一样,即使有源代码,你也不可能把所有的功能都弄到一个项目下,既不利于扩展,也不利于维护.
      

  3.   

    我曾经做过一个项目,在项目开发完毕以后,客户要求添加一个天气预报的功能,因为采用的是反射的方式,我把天气预报的调用重新写了一个项目,生成的dll添加进原来的运行目录中,再在配置文件中把新添加的dll信息填进去。新添加的功能就可以使用了,不必更改原来的代码。这是一个好处吧。
      

  4.   

    如果要把程序做成插件式、插拔式,就可以使用反射实现
    例如说,现在你的程序通过反射调用一个DLL的函数,那天这个DLL不用了,或者来了一个新的DLL,只要接口不变(就算接口变了,也可以通过配置文件获得),都可以直接使用新的DLL,那不需要修改你原来的程序
      

  5.   

    想想開閉原則,有些情況用那一個DLL是要在運行時才知道的.
    例如:你開發了一個系統,是支持SQL與mySQL的,而連接這兩個不同數據庫是用不同的DLL的,你可以通過配置來改變他的連接.
      

  6.   

    反射是一个运行库类型发现的过程。通过反射可以得到一个给定程序集所包含的所有类型的列表,
    这个列表包括给定类型中定义的方法、字段、属性和事件。也可以动态的发现一组给定类支持的借口、方法的参数和其他相关信息如基类、命名空间、数据清单等。
    右键引用DLL是在程序运行前已经指定了