如何获取基类型中字段的值



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

相关内容

  • 没有找到相关文章

最新更新