对继承的静态属性的反射

本文关键字:反射 属性 静态 继承 | 更新日期: 2023-09-27 18:25:01

我在.NET 4.0中通过反射获取静态属性时遇到了一些问题。

例如,我有以下类:

class Foo
{
    public static int MyProperty
    {
        get { return 1234; }
    }
}
class Bar : Foo
{
}

现在如果我打电话:

typeof(Foo).GetProperties();

我得到了一个属性"MyProperty"的预期列表。如果我打电话给:

typeof(Bar).GetProperties();

我一无所获。不幸的是,我严格处理以Type数据类型存储的值,所以我不能直接调用typeof(Foo).GetProperties()

谢谢你的帮助
godwin

对继承的静态属性的反射

您可以指定BindingFlags.FlattenHierarchy来获取在基类中声明的静态属性:

var props = typeof(Bar).GetProperties(BindingFlags.Public |
                                      BindingFlags.Static | 
                                      BindingFlags.FlattenHierarchy);
var prop = typeof (Bar).GetProperties(BindingFlags.FlattenHierarchy | BindingFlags.Public | BindingFlags.Static);

如果您需要私有属性,还需要添加BindingFlags.NonPublic。请参阅BindingFlags枚举