反射(C#)简单用法

 如果想复用别人写的.NET程序但手上只有一个编译过的EXE,那么方法之一是用Reflection(反射)。下面是一些例子,初次上手的人可以参考。
  先假设我们要复用的第三方应用程序EXE是由下面的代码编译成的:


  以下是一些直接引用时常见的调用如何用Reflection来改写:
  1. 用不含参数的构造函数生成对象

 

  2. 用含参数的构造函数生成对象
  

 

  3. 调用对象的方法
  

 

  4. Set/Get成员变量

 

  5. 使用枚举类型

 

  ---
  最后,只要有可能,应该尽量不用Reflection,因为相比起直接调用,Reflection的性能相当差。

 

 

 

反射实例:

 

 Class1和Form 窗体在同一个命名空间

 

 

Class1和Form 窗体在不同一个命名空间

 

 

 

下面是如何使用反射操作以上类;

 

 

      反射是审查元数据并收集关于它的类型信息的能力。元数据(编译以后的最基本数据单元)就是一大堆的表,当编译程序集或者模块时,编译器会创建一个类定义表,一个字段定义表,和一个方法定义表等.

      反射的主要作用是用来扩展系统和动态调用程序集。
      所谓扩展系统就是先把系统写好,系统里面定义接口,后面开发的人去写接口的代码。
      此时该系统就要用反射了,系统用反射调用接口,当接口没写,系统利用反射就不会不会出错,此时就等于没实现此功能而已,当接口被人写好了,系统就会自动调用接口的功能展现在系统上。即反射实现即插即用功能。

      动态调用程序集就是利用反射去调用编译好的dll,当然此时的dll没有被引用到你所建的工程里面。
      当你编译你的工程时,不会编译你调用的dll,当你运行到调用dll时,此时才会去调用dll,判断是否有语法语义,等编译,运行的错误。
这样利用反射具有一定灵活性,就是不用从你的工程调用dll,还有就是dll可随时改变(当然接口还是要对应),不需改变你所建的工程。

      总之反射最好的好处就是新建工程时后不须一定要写好dll,可新建完工程后,后期写dll也可以。即所谓后期绑定。当然利用反射是耗资源的,损失效率,如果不是在上面的场合利用此技术,可能不会带来好处,反而是坏处。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值