我有一个派生自基类的类,它有一个私有字段。 如何获取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获取值?或者我的做法是错的?
答案 0 :(得分:6)
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
之间注入基数,您的反射会立即中断;而使用typeof(BaseClass)
则不会 - 除非您实际从BaseClass
的继承树中删除SuperClass
。