我有一个从基类派生的类,它有一个私有字段。如何获取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
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
和BaseClass
之间注入碱基,您的反射将立即中断;而使用CCD_ 8则不会——除非您真正从CCD_ 10的继承树中删除CCD_。