C#在类外部实现对私有字段的值的修改

定义一个测试类:

1 class RefHero
2 {
3     string name = "Tom";
4     int age = 10;
5     bool isBoy = false;
6 }

如果在外部想实现对私有字段的修改,该如何做呢?下面使用反射的技术实现这个需求,直接上代码:

 1 static void ModifyRefHeroFiled()
 2 {
 3     //收集需要修改的私有字段的名字
 4     string Filed_name = "name";
 5     string Filed_age = "age";
 6     string Filed_isBoy = "isBoy";
 7 
 8     Type type = typeof(RefHero);
 9     RefHero hero = new RefHero();
10     //获取 RefHero 中所有的实例私有字段
11     FieldInfo[] fieldArray = type.GetFields(BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.DeclaredOnly);
12     foreach (FieldInfo filed in fieldArray)
13     {
14         string fileName = filed.Name;
15         if (Filed_name == fileName)
16             filed.SetValue(hero, "Jick");
17         else if (Filed_age == fileName)
18             filed.SetValue(hero, 18);
19         else if (Filed_isBoy == fileName)
20             filed.SetValue(hero, true);
21         Console.WriteLine(string.Format("字段名字:{0} 字段类型:{1} 值 = {2}", filed.Name, filed.MemberType, filed.GetValue(hero)));
22     }
23 }

运行结果:

C#在类外部实现对私有字段的值的修改

这篇文章中也有对 filed.SetValue() 方法的一个使用,只不过是使用在unity工程中:

https://www.cnblogs.com/luguoshuai/p/12775902.html

C#在类外部实现对私有字段的值的修改

上一篇:2020 Petrozavodsk Winter Camp, Jagiellonian U Contest 做题记录


下一篇:Windows上Docker Toolbox修改镜像源