枚举的低级表示

时间:2016-02-11 12:54:53

标签: c#

我有这个枚举:

enum Color
{
    RED,
    GREEN,
    BLUE
}

以及以下IL生成的代码:

.class private auto ansi sealed WindowsFormsApplication1.Color
    extends [mscorlib]System.Enum
{
    // Fields
    .field public specialname rtspecialname int32 value__
    .field public static literal valuetype WindowsFormsApplication1.Color RED = int32(0)
    .field public static literal valuetype WindowsFormsApplication1.Color GREEN = int32(1)
    .field public static literal valuetype WindowsFormsApplication1.Color BLUE = int32(2)

}

但是我的反编译工具无法向我显示C#反编译代码。

我想知道枚举是什么:它是类型吗?它是结构类型吗?

.class是什么意思?和int32(0),等等。

1 个答案:

答案 0 :(得分:5)

枚举的实际数据类型可以是a number of basic types, like byte, int and long。 (在这种情况下,intint32 value__

定义的.class包含可能枚举值的后备列表(static字段和枚举值本身。)(请注意.classalso used for struct in CIL,所以不要我太过于字面意思了。所以我猜这是一个结构,它更有意义,因为它实际上只包含一个不可变的支持字段。它被视为基本类型。

int32(0)创建一个值为0的整数,这是枚举中第一个项的默认值。