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

jam*_*o00 13 c# reflection inheritance static field

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

我都试过type.GetFields(BindingFlags.Static)type.GetFields().

Meh*_*ari 20

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

static除非BindingFlags.FlattenHierarchy指定,否则不返回基类的成员:

type.GetFields(BindingFlags.Static 
             | BindingFlags.FlattenHierarchy
             | BindingFlags.Public)
Run Code Online (Sandbox Code Playgroud)

  • 实际上仍然不会这样做.您必须直接在基类上反映私有静态字段.虽然我希望OP不试图这样做;) (2认同)

Noo*_*ilk 6

因为它们属于基类型,并且不是继承的.上移到那种类型,你会发现它们.

- 编辑

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

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


cho*_*ell 5

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