C#通俗易懂谈反射(一)

一、反射是什么意思?

从字面意思来看,反射就是通过一种机制来窥探内部的结构和细节。例如通过雷达反射可以窥探到天空,通过声呐可以窥探海底等。
在计算机程序中,反射就是一种可以窥探到一个类或程序集内部的结构的一种机制。

那么问题来了,什么情况下需要“窥探”?一般情况在对一个隐藏的类或未知的程序集的时候需要得到他们内部的结构。其中包括类型,属性,方法等等。

有过这样的经历,当我们在C#中引用了一个Dll时可以查看到这个Dll内部含有的类,数据类型和方法等,那么这种过程就是VS利用了反射机制窥探到此DLL内部结构的。这样便于我们使用它。

通常反射机制在架构中应用的比较多,因为通过反射可以不用事先知道一个Dll内部的结构。通过一步一步的检索,来确定它内部具有的的类型、属性、方法、枚举、接口、结构等数据。此外我们还可以利用窥探到的信息直接创建对象,即使这个对象的类型在编译的时候不知道。这样对于实现动态加载DLL是很有帮助的。具体后期会说。

二、反射的具体功能

1、使用Assmbly 定义和加载程序集,加载在程序集清单中列出模块,以及从此程序集中查找类型并创建该类型的实例。
2、使用Module了解包含模块的程序集以及模块的类等,还可以获取在模块上定义的所有全局方法或其他特定的非全局方法。
3、使用ConstructorInfo了解构造函数的名称、参数、访问修饰符(public、private)和实现详细信息(abstract、virtual)等。
4、使用MethodInfo了解方法的名称、返回类型、参数、访问修饰符(public、private)和实现详细信息(abstract、virtual)等。
5、使用FieldInfo了解字段的名称、返回类型、参数、访问修饰符(public、private)和实现详细信息(static)等。并获取或设置字段值。
6、使用EventInfo了解事件的名称、事件处理程序数据类型、自定义属性、声明类型和反射类型等,并添加或移除事件处理程序。
7、使用PropertyInfo了解属性的名称、数据类型、声明类型、反射类型和只读或可写状态等,获取或设置属性值。
8、使用ParameterInfo了解参数的名称、数据类型、是输入参数还是输出参数,以及参数在方法签名中的位置等。

实现反射的具体功能,需要引入命名空间。如下:
System.Reflection

其中包含Type类和Assembly类
使用Type类可以访问任何给定数据类型的信息,使用Assembly类可以用于访问给定程序集的信息,或把这个程序集加载到程序中。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值