GetFields方法获取枚举值

eya*_*yal 4 .net reflection enums

  1. 我注意到在调用GetFields()枚举类型时,我得到一个类型为int32的额外字段.它从哪里来的??
  2. 当我调用另一个重载时(GetFields(System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Static) ),它返回所需的字段.这是否意味着枚举的字段不是公共的?

谢谢

Jus*_*tin 6

反射器 IL Spy可以解释这一点.

看看反编译的枚举,你会看到如下所示:

.class public auto ansi sealed ConsoleApplication1.Foo
    extends [mscorlib]System.Enum
{
    // Fields
    .field public specialname rtspecialname int32 value__
    .field public static literal valuetype ConsoleApplication1.Foo Bar = int32(0)
    .field public static literal valuetype ConsoleApplication1.Foo Baz = int32(1)

} // end of class ConsoleApplication1.Foo
Run Code Online (Sandbox Code Playgroud)

Fooenum被实现为一个密封的类,它包含一个int32被调用的value__- 你正在看到的额外字段.

值得注意的是,它还继承了System.Enum其中还有额外的(静态)字段.