.NET Framework 枚举定义
示例
枚举是一种特殊的类。该enum关键字告诉编译器,这个类从抽象继承System.Enum类。枚举用于不同的项目列表。
public enum MyEnum
{
Monday = 1,
Tuesday,
Wednesday,
//...
}您可以将枚举视为将常量映射到某些基础值的便捷方法。上面定义的枚举声明一周中每一天的值,并以开头1。Tuesday随后将自动成为映射到2,Wednesday要3等
默认情况下,枚举int用作基础类型并从0开始,但是您可以使用以下任何整数类型:byte,sbyte,short,ushort,int,uint,long,orulong,并且可以为任何项目指定显式值。如果显式指定了某些项,但没有明确指定,则最后定义的项之后的每个项将增加1。
我们将通过将其他一些值强制转换为MyEnum来使用此示例,如下所示:
MyEnum instance = (MyEnum)3; //名为“instance”的变量得到一个
//MyEnum.Wednesday的值,它映射到3。
int x = 2;
instance = (MyEnum)x; //现在'instance'的值为MyEnum.Tuesday另一个有用但复杂的枚举类型称为Flags。通过用属性装饰枚举Flags,可以一次为一个变量分配多个值。请注意,在执行此操作时,必须以2为底的表示形式明确定义值。
[Flags]
public enum MyEnum
{
Monday = 1,
Tuesday = 2,
Wednesday = 4,
Thursday = 8,
Friday = 16,
Saturday = 32,
Sunday = 64
}现在,您可以一次比较多个值,或者使用按位比较,或者如果使用的是.NET4.0或更高版本,则可以使用内置Enum.HasFlag方法。
MyEnum instance =MyEnum.Monday| MyEnum.Thursday; //实例的值现在为
//*两个*星期一和星期四,
//用0100表示(以二进制表示)。
if (instance.HasFlag(MyEnum.Wednesday))
{
//它没有,所以跳过了该块
}
else if (instance.HasFlag(MyEnum.Thursday))
{
//确实如此,所以执行了该块
}由于Enum类是的子类System.ValueType,因此将其视为值类型,并按值而不是按引用传递。基础对象是在堆上创建的,但是当您将枚举值传递给函数调用时,使用枚举的基础值类型(通常为System.Int32)的值的副本将被推入堆栈。编译器跟踪此值与在堆栈上创建的基础对象之间的关联。有关更多信息,请参见ValueType类(系统)(MSDN)。