繁体   English   中英

C#反射基类麻烦

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM