如何在C#中将内存分配给枚举数据类型

时间:2019-01-07 05:11:04

标签: c# .net enums

其中是存储在内存中的枚举数据类型。当我声明枚举数据类型时,编译器内部实际发生了什么。

这是示例程序

using System;

public class Program
{
    public static void Main()
    {
        WeekDays wd = new WeekDays();
        Console.WriteLine(wd.Friday);
        Console.WriteLine((int)wd.Friday);
    }
}

public enum WeekDays
{
    Monday = 0,
    Tuesday = 1,
    Wednesday = 2,
    Thursday = 3,
    Friday = 4,
    Saturday = 5,
    Sunday = 6
}

我们可以使用为Enum创建的实例吗?编译器不允许我访问该类的变量 它会引发此错误“无法通过实例引用访问静态成员`WeekDays.Friday',而应使用类型名称对其进行限定”

2 个答案:

答案 0 :(得分:1)

枚举具有编译时间常数的内存配置文件。默认情况下,整数常量,但也可以使用其他整数类型。可能还有一些其他的东西需要反思,但我不确定这在总体上是否有意义。

采用枚举值的变量因此具有基础类型的内存配置文件。通常也可以隐式完成将Enum强制转换为Integer的操作,但反之亦然。

答案 1 :(得分:0)

枚举未在内存中分配-它们仅存在于编译阶段。它们仅在告诉您的示例中星期二是什么值时才存在。代码运行时-不再有枚举。

它与以下功能相同

#define Monday 0;
#define Tuesday 1;
.
.
.
.
#define Sunday 6;

但是我们更喜欢枚举而不是定义,因为使用枚举比#defines更容易支持和读取代码。

u通过此Stackoverflow answer

可以清楚地看到枚举大小