c# - 我可以使用反射更改 C# 中的私有(private)只读继承字段吗?

标签 c# reflection inheritance superclass

就像在 java 中我有:

Class.getSuperClass().getDeclaredFields()

我如何知道并设置父类(super class)的私有(private)字段?

我知道强烈不建议这样做,但我正在测试我的应用程序,我需要模拟一个错误的情况,其中 id 正确而名称不正确。但是这个 Id 是私有(private)的。

最佳答案

是的,可以在构造函数运行后使用反射来设置只读字段的值

var fi = this.GetType()
             .BaseType
             .GetField("_someField", BindingFlags.Instance | BindingFlags.NonPublic);

fi.SetValue(this, 1);

编辑

已更新以查看直接父类型。如果类型是通用的,此解决方案可能会出现问题。

关于c# - 我可以使用反射更改 C# 中的私有(private)只读继承字段吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1401458/

相关文章:

c# - 当列表包含 x,y,z 时,为什么 list.Contains(x) 找不到 x

c# - 闪烁按钮(非常基本)

c# - C# 中的反射和参数

c# - 在 C# 中,找出类是否具有属性的最佳方法是什么(使用反射)

c++ - 继承派生类构造函数

c# - RuntimeReflectionExtensions.GetRuntimeMethod 无法按预期工作

c# - 如何使用 Bootstrap 添加事件样式

java - 类型嵌套时 TYPE_USE 注释丢失,通用接口(interface)

python - 如何在Python 3中重用父类(super class)方法的变量?

java - 如何为动态类型与声明类型不同的类字段编写 getter?