反射随记(C#中反射的使用)

定义

反射是指计算机程序在运行时(Run time)可以访问、检测和修改它本身状态或行为的一种能力。Go语言圣经中是这样定义反射的:Go 语言提供了一种机制在运行时更新变量和检查它们的值、调用它们的方法,但是在编译时并不知道这些变量的具体类型,这称为反射机制。

实现与调用

(1)编译时为每个类生成一个全局数据,这个全局数据为Type(以C#为例)类型,里面存放类的描述信息,包括方法描述和属性描述。

(2)Type通过 MethodInfo 和 FieldInfo 描述类的方法和属性。

(3)通过Type实例化一个对象出来,根据属性名和方法名访问属性和调用方法。

代码调用

var t = instance.GetType();

Object obj = Activator.CreateInstance(t);

MethodInfo methodInfo = t.GetMethod(methodName);

methodInfo.Invoke(obj, object[] parameter);

FieldInfo fieldInfo = t.GetField(fieldName, BindingFlags.NonPublic | BindingFlags.Instance);

/*

        BindingFlags.Public|BindingFlags.Instance 默认查找public、instance内容。

        BindingFlags.NonPublic|BindingFlags.Instance 查找nonpublic、instance内容

        BindingFlags.Instance和BindingFlags.Static二者必须有一项或者都有。如果访问实例,就选instance,反之选static。

*/

fieldInfo.SetValue(obj, object value);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值