例如我有一个简单的枚举类型:
enum mye:
{
e1,
e2,
e3
}
书上说,"枚举类型隐式的实例化为System.Enum类的结构"----也就是说,"类型"被实例化为"结构"。这句话怎么理解? 我以前的理解是,枚举类似于static类型,类本身没有实例,但在程序中可以用枚举定义的各个值。
所以我的问题是,程序运行的时候是否struct的实例称为mye(注意,不是e1,e2,e3,而是mye)?
这个实例是全局的吗类似于一个static变量? 谁来创建System.Enum类的结构体,在什么时间创建,是程序本身编译时就决定了的,还是.net framework在运行时决定的?
我以前习惯用C语言,感觉C#的这个定义非常不同。还请指点,谢谢。
------解决思路----------------------
不是类似static
Enum是继承自System.ValueType也就是说 它是一个值类型。是分配在stack上,而不是managed heap上。
另外 下面来自msdn:https://msdn.microsoft.com/en-us/library/sbbt4032.aspx
Every enumeration type has an underlying type, which can be any integral type except char. The default underlying type of enumeration elements is int.
意思是.net在保存Enum的时候是保存成它的underlying type -- int 除非你特别指定成别的整型类型。
To declare an enum of another integral type, such as byte, use a colon after the identifier followed by the type, as shown in the following example.
enum Days : byte {Sat=1, Sun, Mon, Tue, Wed, Thu, Fri};
------解决思路----------------------
书上说的不一定是最正确的,一般情况下定义类型如果未指定父类型就是 Object,
这里的意思应该是定义枚举类型时默认的父类型是 Enum 类型。
既然有类型,那就有实例,这是肯定的,就是工厂的存在是为了生产产品。
------解决思路----------------------
会啊。
int i = 1234; // i, 是一个值为1234, 类型为Int32的实例。
mye e = mye.e1; // e, 是一个值为mye.e1, 类型为mye的实例。
int si = sizeof(int); // 每个Int32实例的大小为4个字节。
int se = sizeof(mye); // 每个mye实例的大小为4个字节。
------解决思路----------------------
在windows API中有很多用常量(宏)来定义一组参数值
而在面向对象的强类型语言里,则直接将其视作为一种类型。可以将枚举子理解为这个枚举类型的实例,只不过它们都是静态的。并且默认是当作int类型。未指定的第一项为零,后面的递增1