c#中的枚举类型

mda*_*019 5 c# enums memory-management reference value-type

当我们创建枚举类型的变量并为其赋予枚举值时

enum Members{HighlyQualified, Qualified, Ordinary}
class
{
static void Main()
{
 Members developers = Members.HighlyQualified;
 Console.WriteLine(developers);//write out HighlyQualified
}
}
Run Code Online (Sandbox Code Playgroud)

由于枚举是值类型,因此开发人员的值存储在由Members.HighlyQualified返回的堆栈上.我们很清楚开发人员的值是字符串,它引用了字符的内存位置.

现在,

1.如果我们将Members.HighlyQualifed转换为int,则返回的值为0.如何发生?

2.对于枚举类型,什么值实际存储在堆栈中?

Jon*_*eet 10

在这里我们很清楚,开发人员的价值是字符串,它引用了字符的内存位置.

不,这不对.值developers的类型是Members.它通过该Console.WriteLine方法转换为字符串.你将调用Console.WriteLine(object)重载,它将值设置为 - 然后Console.WriteLine将调用ToString该盒装值,给出相应的枚举值名称.

如果我们将Members.HighlyQualifed转换为int,则返回的值为0.如何发生?

HighlyQualified是第一个声明的成员Members,并且您没有指定任何特定值.默认情况下,C#编译器将值0赋给第一个声明的值,然后每次递增1.如果你投Members.Qualifiedint,你会得到1.

对于枚举类型,实际存储在堆栈上的值是多少?

这个值实际上只是一个数字.(在这种情况下,int因为这是默认的底层类型.但堆栈槽具有正确的类型 - 枚举类型.