定义一个测试类:
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 }
运行结果:
这篇文章中也有对 filed.SetValue() 方法的一个使用,只不过是使用在unity工程中: