我希望通过字段名称获得基类字段的值,在子类中:
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?;
}
}
为什么我有TargetException,当我调用test()方法?
答案 0 :(得分:2)
double? s = GetType()
.GetField("x", BindingFlags.FlattenHierarchy | BindingFlags.NonPublic | BindingFlags.Static)
.GetValue(null) as double?;
来自System.Reflection.BindingFlags
:
FlattenHierarchy:指定它 公共和受保护的静态成员 应该返回层次结构。 继承的私有静态成员 不返回类。静态的 成员包括领域,方法, 事件和属性。嵌套类型 不归还。
我认为这只是一个测试反映基类型中静态成员的玩具示例?否则,在此上下文中使用反射似乎有点奇怪:protected
成员对子类是可见的。你可以这么做:
double? s = x;
答案 1 :(得分:1)
添加BindingFlags.FlattenHierarchy
:
GetField("x", BindingFlags.NonPublic | BindingFlags.Static | BindingFlags.FlattenHierarchy).GetValue(null) as double?;