当前位置: 首页 > news >正文

.net反射(Reflection)

文章目录

  • 一.概念:
  • 二.反射的作用:
  • 三.代码案例:
  • 四.运行结果:

一.概念:

.NET 反射(Reflection)是指在运行时动态地检查、访问和修改程序集中的类型、成员和对象的能力。通过反射,你可以在运行时获取类型的信息、调用方法、访问字段和属性,以及创建对象实例,而无需在编译时知道这些类型的具体信息。

二.反射的作用:

换句话说,反射可以在类的内部成员不能够直接访问的时候(比如private的时候),我们可以通过反射绕过成员的访问修饰符达到访问内部成员的效果。

三.代码案例:

1.自定义一个MyClass类,添加内部private字段和方法,用于案例测试。

public class MyClass
{private int MyProperty = 10;private void MyMethod(string message){Console.WriteLine("MyMethod called with message: " + message);}
}

2.在控制台主程序中,直接通过反射访问MyClass类中的私有字段和方法,达到绕过访问修饰符直接访问类内部成员的效果。

//获取类型信息
Type myClassType = typeof(MyClass);
//创建MyClass实例
var myClassInstance = Activator.CreateInstance(myClassType);string Key = "MyProperty";//获取私有字段
FieldInfo privateFiledInfo = myClassType.GetField(Key, BindingFlags.NonPublic | BindingFlags.Instance);
if (privateFiledInfo != null)
{int filedValue = (int)privateFiledInfo.GetValue(myClassInstance);Console.WriteLine("私有字段值为:"+filedValue);//设置私有字段的值privateFiledInfo.SetValue(myClassInstance, 20);Console.WriteLine("修改后私有字段的值为:"+(int)privateFiledInfo.GetValue(myClassInstance));
}MethodInfo privateMethodInfo = myClassType.GetMethod("MyMethod", BindingFlags.NonPublic | BindingFlags.Instance);
if (privateMethodInfo != null)
{privateMethodInfo.Invoke(myClassInstance,new object[] { "Hello,Reflection!" });
}

四.运行结果:

测试案例通过,成功通过反射绕过成员访问修饰符,直接访问了类的内部成员
在这里插入图片描述

http://www.lryc.cn/news/340984.html

相关文章:

  • P1278 单词游戏 简单搜索+玄学优化
  • 软考 - 系统架构设计师 - 数据架构真题
  • Ubuntu22.04下opencv4.9.0环境的搭建
  • Flask如何在后端实时处理视频帧在前端展示
  • 04-15 周一 GitHub仓库CI服务器actions-runner和workflow yaml配置文档解析
  • 论文笔记:SmartPlay : A Benchmark for LLMs as Intelligent Agents
  • 搜维尔科技:【工业仿真】煤矿安全知识基础学习VR系统
  • 线程和进程的区别(面试)
  • 抓取电商产品数据的方法|电商平台商品详情数据|批量上架|商品搬家|电商封装API数据采集接口更高效安全的数据采集
  • 关联规则Apriori算法
  • 书生·浦语大模型全链路开源体系-第4课
  • HTML优化SEO
  • RabbitMQ-交换机
  • mapreduce中的MapTask工作机制(Hadoop)
  • 景区文旅剧本杀小程序亲子公园寻宝闯关系统开发搭建
  • 性能优化---webpack优化
  • YOLOv9改进策略 | 损失函数篇 | EIoU、SIoU、WIoU、DIoU、FocusIoU等二十余种损失函数
  • 贪心算法-跳跃游戏
  • sql知识总结二
  • VSCode和CMake实现C/C++开发
  • 【机器学习300问】74、如何理解深度学习中L2正则化技术?
  • C语言程序设计每日一练(4)
  • m4p转换mp3格式怎么转?3个Mac端应用~
  • 全国产化无风扇嵌入式车载电脑在车队管理嵌入式车载行业应用
  • 爬虫入门——Request请求
  • 创建一个javascript公共方法的npm包,js-tool-big-box,发布到npm上,一劳永逸
  • 【在线OJ系统】自定义注解实现分布式ID无感自增
  • 35. UE5 RPG制作火球术技能
  • 计算机网络 TCP/IP体系 物理层
  • 微服务相关