如何获得基类型的字段值

时间:2012-01-10 08:58:39

标签: c# .net oop inheritance reflection

我有一个派生自基类的类,它有一个私有字段。 如何获取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获取值?或者我的做法是错的?

1 个答案:

答案 0 :(得分:6)

使用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之间注入基数,您的反射会立即中断;而使用typeof(BaseClass)则不会 - 除非您实际从BaseClass的继承树中删除SuperClass