.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!" });
}

四.运行结果:

测试案例通过,成功通过反射绕过成员访问修饰符,直接访问了类的内部成员

相关推荐
宝桥南山13 小时前
.NET 11 - 尝试一下Minimal API中的异步验证新特性
microsoft·微软·c#·asp.net·.net·.netcore
无风听海14 小时前
深入理解.NET中的 Lazy<T>
服务器·php·.net
海盗123414 小时前
微软技术日报 2026-10-14:十月补丁 1411 个漏洞,.NET 11 交出 RC2
人工智能·microsoft·机器人·aigc·.net
学以智用15 小时前
.NET WinForms / WPF / Blazor 模板详解
.net
黄一一91124315 小时前
吾爱大佬开发,离线可用!PDF文件处理工具,本地网页版文件-浏览器里就能搞定,所有操作系统可用
windows·安全·阿里云·pdf·.net·开源软件
慧都小妮子2 天前
MSG 附件太占内存?Aspose.Email for .NET 26.9 延迟加载
c#·.net·aspose·内存优化·延迟加载·aspose.email·附件内存
学以智用2 天前
ASP.NET Core 项目模板详解:Web应用 / Web API / MVC / Razor Pages
.net
IT规划师2 天前
MQTT实战 - 用了8年MQTT,我为什么还要重新系统啃一遍(一)
物联网·.net
邹肖桥2 天前
使用S7.net动态库对西门子Plc S7-1200进行通讯操作
.net
chingho3 天前
GitHub上这10个C#项目,不仅实用,还怪好玩的
c#·github·.net·开源项目