You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 18:09:03