[英]C# reflection base class trouble
我想通过字段名称获取子类中基类字段的值:
class A
{
protected static double? x;
}
class B : A
{
B()
: base()
{
x = 13F;
}
void test()
{
double? s = this.GetType().
GetField("x", BindingFlags.NonPublic | BindingFlags.Static).GetValue(null) as double?;
}
}
为什么在我调用test()方法时出现TargetException?
double? s = GetType()
.GetField("x", BindingFlags.FlattenHierarchy | BindingFlags.NonPublic | BindingFlags.Static)
.GetValue(null) as double?;
从System.Reflection.BindingFlags
:
FlattenHierarchy:指定应返回层次结构中的公共和受保护的静态成员。 继承的类中的私有静态成员不会返回。 静态成员包括字段,方法,事件和属性。 不返回嵌套类型。
我假设这只是一个玩具示例,可以测试基本类型中的静态成员? 否则,在这种情况下使用反射似乎有点奇怪: protected
成员对子类可见。 您可以这样做:
double? s = x;
添加BindingFlags.FlattenHierarchy
:
GetField("x", BindingFlags.NonPublic | BindingFlags.Static | BindingFlags.FlattenHierarchy).GetValue(null) as double?;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.