C#Reflection - 派生类型中的基类静态字段

时间:2009-08-24 23:18:43

标签: c# reflection inheritance static field

在C#中,当我反映派生类型时,为什么我看不到基类的静态字段?

我已经尝试了type.GetFields(BindingFlags.Static)type.GetFields()

4 个答案:

答案 0 :(得分:20)

这是它的工作原理。 static成员实际上是非面向对象的东西。它们不是多态的,它们实际上属于它们的声明类型,并且与继承层次结构中的其他类型无关。例如,在访问派生类中的静态成员之前,不需要运行基类的静态初始化程序。

除非指定static,否则不会返回

BindingFlags.FlattenHierarchy个基类成员:

type.GetFields(BindingFlags.Static 
             | BindingFlags.FlattenHierarchy
             | BindingFlags.Public)

答案 1 :(得分:6)

因为它们属于基类型,并且不是继承的。向上移动到那个类型,你就会找到它们。

- 编辑

Mehrdad有正确的答案,但仅仅是为了完整性:

foreach(FieldInfo f in b.GetType().GetFields(
    BindingFlags.Static
    | BindingFlags.FlattenHierarchy
    | BindingFlags.Instance
    | BindingFlags.Public
    )){
    Console.WriteLine("found: " + f.Name);
}

答案 2 :(得分:5)

将BindingFlags.FlattenHierarchy枚举设置为Static,这也将搜索静态成员。更多信息: http://msdn.microsoft.com/en-us/library/system.reflection.bindingflags.aspx

答案 3 :(得分:3)

您的类型只是您的类型 - 它不包含基本类型。如果要搜索基类中的字段,则需要使用BindingFlags.FlattenHierarchy

你应该看看BindingFlags documentation来完成你需要的东西。