我有一个派生自具有私有(private)字段的基类的类。 如何获取 BaseType 字段值?
public class SuperClass : BaseClass
{
}
public class BaseClass
{
private object theField;
}
我有 SuperClass 实例,代码应该是这样的:
var baseType = super.GetType().BaseType;
var fieldInfo = baseType.GetField("theField", BindingFlags.NonPublic | BindingFlags.Instance);
现在如何从 fieldInfo 中获取值?还是我的做法不对?
最佳答案
fieldInfo.GetValue(this)
顺便说一句,你不需要 super.GetType
- 你可以这样做:
this.GetType().BaseType
同样,由于您知道基本类型 - 这样做可能稍微快一些
typeof(BaseClass).GetField("theField" ....)
更新
我使用 this
因为你的问题暗示你写的代码是 SuperClass
的一部分,因为你已经写了(尽管它不是有效的 C#):
var baseType = super.GetType().BaseType;
如果不是这种情况,并且您有一个 SuperClass
的实例,那么这将执行:
var obj = new SuperClass();
var privateValue = typeof(BaseClass).GetField("theField",
BindingFlags.NonPublic | BindingFlags.Instance).GetValue(obj);
我实际上强烈建议不要使用 obj.GetType().BaseType
- 因为如果您选择在 SuperClass 之间注入(inject)一个基数,您的反射会立即中断
和 BaseClass
;而使用 typeof(BaseClass)
不会 - 除非您实际上从 SuperClass
的继承树中删除 BaseClass
。
关于c# - 如何获取基类型字段的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8800667/