什么是反射 反射能干什么事情

反射是:指程序可以访问、检测和修改它本身状态或行为的一种能力

反射是一种能力,所以给的定义就是说明了它能干嘛。

我们平时用反射主要做:

  • 获取类型的相关信息
  • 动态调用方法
  • 动态构造对象
  • 从程序集中获得类型。

获取类型的相关信息

反射的核心Type类,Type对象提供的属性和方法可以获取对象的一切信息,如:方法、字段、属性、事件...等等。

我们获取已加载程序集中类型的Type对象的几种方法:(以StringBuilder 类型为例)

  1. 直接使用typeof操作符 Type T1 = typeof(StringBuilder); 
  2. 通过类型实例 Type T2 = new StringBuilder().GetType(); 
  3. 通过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进去看看)

 

 

未完待续...

 

 

 

转自:https://www.cnblogs.com/zhaopei/p/reflection.html

posted @ 2020-09-25 10:10  狼窝窝  阅读(292)  评论(0)    收藏  举报