我们知道类型包括两大类:枚举 和 结构(包括了 int double float decimal 等简单类型),他们也都继承于valueType,但是并非所有继承于valueType的类型就一定是值类型 ,这个唯一特例就是System.Enum,这是一张继承关系图
 

所有的枚举类型都继承System.Enum,实现System.Enum所有方法。父类还是引用类型
继承自他的子类确实值类型,那么这个System.Enum和valueType一样很特殊。
现在只能简单说说枚举类型和System.Enum有什么区别:枚举类型是值类型,在栈区分配空间,它也是一种类 却不能被继承(一会从IL看出原因)。Enum 是引用类型 在堆区分配空间,它本事不是枚举类型 它却封装了操作枚举类型的方法。比如          Enum.GetName();
Enum.GetValues();
Enum.GetUnderlyingType();
现在我们声明一个枚举:
    enum MyEnum
    {
        first,
        second=101,
        third
    }
编译后的IL:
.class private auto ansi sealed MyEnum
extends [mscorlib]System.Enum
{
.field public static literal valuetype ConsoleApplication6.MyEnum first = int32(0)
.field public static literal valuetype ConsoleApplication6.MyEnum second = int32(0x65)
.field public static literal valuetype ConsoleApplication6.MyEnum third = int32(0x66)
.field public specialname rtspecialname int32 value__

}