什么是反射 反射能干什么事情
反射是:指程序可以访问、检测和修改它本身状态或行为的一种能力
反射是一种能力,所以给的定义就是说明了它能干嘛。
我们平时用反射主要做:
- 获取类型的相关信息
- 动态调用方法
- 动态构造对象
- 从程序集中获得类型。
获取类型的相关信息
反射的核心Type类,Type对象提供的属性和方法可以获取对象的一切信息,如:方法、字段、属性、事件...等等。
我们获取已加载程序集中类型的Type对象的几种方法:(以StringBuilder 类型为例)
- 直接使用typeof操作符 Type T1 = typeof(StringBuilder);
- 通过类型实例 Type T2 = new StringBuilder().GetType();
- 通过Type类的静态方法 Type T3 = Type.GetType("System.IO.Stream");
不管使用那种,我们最终得到的结果都是一样的。
那么我们通过Type又能得到些什么信息呢?
获取类型本身信息(命名空间名、全名、是否是抽象、是否是类、、、等等)
var T1 = typeof(StringBuilder); Console.WriteLine("命名空间名称:" + T1.Namespace); Console.WriteLine("直接基类型:" + T1.BaseType); Console.WriteLine("全名:" + T1.FullName); Console.WriteLine("是抽象类型:" + T1.IsAbstract); Console.WriteLine("是类:" + T1.IsClass); //.....等等
获取类型成员信息(通过Tyep中的方法GetMembers)
Type T1 = typeof(TClass); var Mets = T1.GetMembers();//获取Type对象的所有公有成员 foreach (var m in Mets) { Console.WriteLine("【" + m.MemberType.ToString()+ "】:" + m.Name); // m.MemberType 是成员类型 }

MemberType所能包含的成员类型有哪些呢?如:(可以自己可以F12进去看看)

未完待续...


浙公网安备 33010602011771号