C#使用Reflection获取基类私有实例字段属性返回默认值问题求助
问题原因分析
你遇到的问题和反射用法无关,核心原因是操作了两个完全独立的类实例:
Button1_Click属于触发点击事件的当前BaseClass实例,你写的newClass.NewClassInt = 50修改的是当前这个实例的newClass字段值- 后续你新创建的
ChildClass childC = new ChildClass()是完全独立的新实例,它继承自BaseClass的newClass字段会在构造时重新初始化,默认值为10,你从未对这个新实例的newClass字段做过赋值 childC.RunTest()内部反射读取的是childC自身的newClass字段,自然只能拿到默认值10
验证方案
你可以修改Button1_Click的代码,直接给新创建的childC实例的newClass字段赋值,就能拿到预期的50:
private void Button1_Click(object sender, EventArgs e) { ChildClass childC = new ChildClass(); // 给childC实例的newClass字段赋值 var newClassField = typeof(BaseClass).GetField("newClass", BindingFlags.Instance | BindingFlags.NonPublic); var childNewClass = (NewClass)newClassField.GetValue(childC); childNewClass.NewClassInt = 50; childC.RunTest(); bool testBool = myBaseBool; }
修改后RunTest中读取到的NewClassInt就会是50,你原本的反射写法本身没有错误。
内容的提问来源于stack exchange,提问作者NewCoder
相关产品推荐
相关产品推荐

