.net反射(Reflection)

这篇具有很好参考价值的文章主要介绍了.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!" });
}

四.运行结果:

测试案例通过,成功通过反射绕过成员访问修饰符,直接访问了类的内部成员
.net反射(Reflection),.Net,.net文章来源地址https://www.toymoban.com/news/detail-857030.html

到了这里,关于.net反射(Reflection)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • .NET 反射的介绍和简单应用

    什么是反射? 反射就是动态发现类型信息的能力。它帮助程序设计人员在程序运行时利用一些信息去动态地使用类型,这些信息在设计时是未知的,这种能力类似于后期绑定。反射还支持的更高级的行为,能在运行时动态创建新类型,并且对这些新类型的操作进行调用。 听

    2024年02月01日
    浏览(24)
  • Reflection java反射源码分析

    Java的反射(reflection)机制是指在程序的运行状态中,可以构造任意一个类的对象,可以了解任意一个对象所属的类,可以了解任意一个类的成员变量和方法,可以调用任意一个对象的属性和方法。这种 动态获取程序信息 以及 动态调用对象的功能 称为Java语言的反射机制。反

    2024年02月02日
    浏览(26)
  • Java的反射(reflection)机制的简单使用

    目录 一、定义 二、用途 三、反射基本信息 四、反射相关的类 五、反射示例 六、反射的优点和缺点         Java的反射机制是 运行时的状态 ,可以通过反射来 调用类里面的属性和方法 , 私有的属性和方法 也可以调用,也可以 对它们进行修改 。         (1)、在第三方

    2024年02月08日
    浏览(38)
  • [Unity/URP学习]反射探针(Reflection Probe)

    传统上,游戏使用一种称为_反射贴图_的技术来模拟来自对象的反射,同时将处理开销保持在可接受的水平。此技术假定场景中的所有反射对象都可以“看到”(因此会反射)完全相同的周围环境。如果游戏的主角(比如闪亮的汽车)处于开放空间中,此技术将非常有效,但

    2023年04月09日
    浏览(29)
  • C#中的反射(Reflection)使用经典案例

    C#中的反射(Reflection)是.NET框架提供的一种强大的运行时元编程机制,它允许程序在运行时获取类型信息、创建对象实例、调用方法、访问字段和属性等,而这些操作在编译时可能是未知的。以下是几个使用反射的典型场景: 1. 动态加载和调用类的方法 假设有一个库包含多

    2024年02月02日
    浏览(33)
  • unity在使用Reflection Probe(反射探头)bake(烘焙)时,无法反射出范围內的物体。

    bake后发现反射探头还是原来的样子,解决办法以下: 打开lighting设置,观察最下面是否为图中这样   如果是,则点击旁边的cancel即可解决问题。     

    2024年02月12日
    浏览(28)
  • .NET Core反射获取带有自定义特性的类,通过依赖注入根据Attribute元数据信息调用对应的方法

    前段时间有朋友问道一个这样的问题,.NET Core中如何通过Attribute的元数据信息来调用标记的对应方法。我第一时间想到的就是通过C#反射获取带有Custom Attribute标记的类,然后通过依赖注入(DI)的方式获取对应服务的方法并通过反射动态执行类的方法,从而实现更灵活的编程

    2023年04月15日
    浏览(35)
  • asp.net core6 webapi 使用反射批量注入接口层和实现接口层的接口的类到ioc中

    IBLL接口层类库 BLL实现接口层类库 program中利用反射批量注入 在控制器中使用构造函数传参就可以调用已经注册的所有是是实现接口的类了的实列了

    2024年02月13日
    浏览(30)
  • .net framework、.net standard、 .net core .net 5/6 区别

    之前一直使用.net framework框架编写程序,这几年微软的动作有点大,更新迭代的有些快,对出现的.net standard、 .net core 、.net 5/6框架一直搞不清是什么关系,今天整理下这几个框架的关系。 物联网时代到来,各种跨平台的需求原来越强烈,.net framework框架只能在windows上运行,

    2024年02月08日
    浏览(40)
  • 关于微软NET家族族谱将讲解 关于 最全.NET Core、NET 5、NET 6和.NET 7简介和区别

    不知道从什么时候开始,.NET 出来了越来愈多的名词 ,Visual Studio 版本从2000 一直到了 现在2022 ,中间陆续出来十多个版本,到后面 vscode ,底层 .NET 名称也是越来越花里胡哨的 从.NET FrameWork 1.0到 .net core 到 .NET  5 ,还有各种SDK 啥玩意的,最主要的是 市面上用.NET的公司不多,

    2024年01月18日
    浏览(32)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包