我们知道类型包括两大类:枚举 和 结构(包括了 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 | |
转载于:https://blog.51cto.com/zjj1211/355869