[C#基础] 10 反射的实现原理

反射定义

动态获取类型信息,动态创建对象,动态访问成员的过程。

作用

在编译时无法了解类型,在运行时获取类型信息,创建对象,访问成员。

流程

1.得到数据类型
2.动态创建对象
3查看类型信息(了解本身信息,成员信息)

常用类

1.取得数据类型Type
方式一:Type.GetType(“类型全名”);
适合于类型的名称已知
方式二:obj.GetType();
适合于类型名未知,类型未知,存在已有对象
方式三:typeof(类型)
适合于已知类型
方式四:Assembly.Load(“XXX”).GetType(“名字”);
适合于类型在另一个程序集中

Type类常用Get系列方法 Is系列属性。

2.MethodInfo(方法)
重要方法: Invoke
3.PropertyInfo(属性)
重要方法:SetValue GetValue
4.FieldInfo(字段)
重要方法:SetValue GetValue
5.ConstructInfo(构造方法)
重要方法:Invoke

动态创建对象

Activator.CreateInstance(string 程序集名称,string 类型全名)
Activator.CreateInstance(Type type);

Assembly assembly = Assembly.Load(程序集);
assembly.CreateInstance(Type);

//找到有参构造方法,动态调用构造方法
type.GetConstructor(typeof(string)).Invoke()

主要使用的类库:System.Reflection

核心类:

  1. Assembly描述了程序集
  2. Type描述了该类的类型
  3. ConstructorInfo描述了构造函数
  4. MethodInfo描述了所有的方法
  5. FieldInfo描述了类的字段
  6. PropertyInfo描述类的属性

通过以上核心类可在运行时动态获取程序集中的类,并执行类构造产生类对象,动态获取对象的字段或属性值,更可以动态执行类方法和实例方法等。

应用要点:
1. 现实应用程序中很少有应用程序需要使用反射类型
2. 使用反射动态绑定需要牺牲性能
3. 有些元数据信息是不能通过反射获取的
4. 某些反射类型是专门为那些clr 开发编译器的开发使用的,所以你要意识到不是所有的反射类型都是适合每个人的。

Unity中的应用
反射获取脚本

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值