就像在 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/