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.Qualified来int,你会得到1.
对于枚举类型,实际存储在堆栈上的值是多少?
这个值实际上只是一个数字.(在这种情况下,int因为这是默认的底层类型.但堆栈槽具有正确的类型 - 枚举类型.