商城网站建设公司,技术培训,python基础教程心得,如何免费制作企业网站文章目录 一.概念#xff1a;二.反射的作用#xff1a;三.代码案例#xff1a;四.运行结果#xff1a; 一.概念#xff1a;
.NET 反射#xff08;Reflection#xff09;是指在运行时动态地检查、访问和修改程序集中的类型、成员和对象的能力。通过反射#xff0c;你可… 文章目录 一.概念二.反射的作用三.代码案例四.运行结果 一.概念
.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! });
}四.运行结果
测试案例通过成功通过反射绕过成员访问修饰符直接访问了类的内部成员