C#反射概念初识

反射初识

反射是一种宽泛的叫法,

它通过System.Reflection命名空间并配合System.Type类,提供了在运行时对类型和类型成员的元数据(metadata)的访问能力。

反射的核心是Type类.

反射的作用

  • 查看和遍历类型和类型成员的元数据
  • 动态创建类型实例,动态调用所创建的实例的方法、字段、属性
  • 迟绑定(Late-Binding)方法和属性

这个类封装了关于类型的元数据,也是进行反射的入口

当获得了类型的Type对象后,就可以根据Type提供的属性和方法获取这个类型的一切信息,包
括方法、字段、属性、事件、参数、构造函数等。

获取已加载程序集中类型的Type对象的方法:

  1. 使用Type类提供的静态方法GetType()
  2. 使用typeof操作符
  3. 通过类型实例获得Type对象
// 1 使用Type.GetType()
Type t1 = Type.GetType("System.IO.Stream");
Console.WriteLine(t1.ToString());

// 2 使用 typeof 操作符
Type t2 = typeof(System.IO.Stream);

// 3 通过类型实例获得Type对象
string name = "JayjzChen";
Type t3 = name.GetType();

Type封装了哪些类型信息

Type t = demo.GetType();

demo类型的基本信息

  • demo是什么类型. 也就是demo类型名称.
  • 该类型在什么命名空间下.
  • 它的基本类型是什么. 以及在 .NET 运行库中的映射类型是什么?
  • 它是值类型还是引用类型.
  • 它的可访问性是那种? public private protected
  • 它是枚举. 类. 数组. 还是 接口?
  • 它是不是基本类型(int等)?

在这里插入图片描述

demo的类型的成员信息

  • 包含哪些字段. 字段名称. 类型. 可访问性.

  • 哪些属性. 属性名称. 类型. 可访问性.

  • 包含哪些构造函数,构造函数的名称,构造函数的参数个数、参数类型、参数名称

  • 包含哪些方法,方法的名称,方法的返回值类型,方法的参数个数、参数类型、参数
    名称

  • 包含哪些事件,事件的名称

  • 实现了哪些接口

PropertyInfo类型,封装了类型的属性信息

ConstructorInfo类型,封装了类型的构造函数信息

MethodInfo类型,封装了类型的方法信息

EventInfo类型,封装了类型的事件信息

ParameterInfo类型,封装了方法和构造函数的参数信息

注意到Type类型,以及所有以Info结尾的类型均继承自System.Reflection.MemberInfo类型,MemberInfo类型提供了获取类型基础信息的能力。

反射程序集 Assembly类型

System.Reflection命名空间下的Assembly类型,代表了一个程序集,并包含了关于程序集的信息

获取Assembly对象有很多种方法,可以使用Assembly类型提供的静态方法LoadFrom()\或Load()

Assembly asm = Assembly.LoadFrom("Demo.dll");
// 
Assembly asm = Assembly.Load("Demo");


















 


            
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值