//位域:将枚举作为位域(即一组标志)来处理
首先,你需要知道枚举类型是值类型,枚举类型直接继承自System.Enum,所有的值类型都是System.ValueType的后代,但System.ValueType的后代不全是值类型,System.Enum就是唯一的特例,System.Enum是引用类型。下面是一些枚举常用知识点:
(1)枚举的声明:枚举声明用于声明新的枚举类型。
访问修辞符 enum 枚举名:基础类型{ 枚举成员}基础类型必须能够表示该枚举中定义的所有枚举数值。枚举声明可以显式地声明 byte、sbyte、short、ushort、int、uint、long 或 ulong 类型作为对应的基础类型。没有显式地声明基础类型的枚举声明意味着所对应的基础类型是 int。(2)枚举成员枚举成员是该枚举类型的命名常数。任意两个枚举成员不能具有相同的名称。每个枚举成员均具有相关联的常数值。此值的类型就是枚举的基础类型。每个枚举成员的常数值必须在该枚举的基础类型的范围之内。示例:public enum TimeofDay:uint{ Morning=-3,Afternoon=-2,Evening=-1}产生编译时错误,原因是常数值 -1、-2 和 –3 不在基础整型 uint 的范围内。(3)枚举成员默认值在枚举类型中声明的第一个枚举成员它的默值为零。以后的枚举成员值是将前一个枚举成员(按照文本顺序)的值加 1 得到的。这样增加后的值必须在该基础类型可表示的值的范围内;否则,会出现编译时错误。示例:public enum TimeofDay:uint{ Morning,Afternoon,Evening}Morning的值为0,Afternoon的值为1,Evening的值为2。(4)为枚举成员显示赋值允许多个枚举成员有相同的值.没有显示赋值的枚举成员的值,总是前一个枚举成员的值+1.示例public enum Number{ a=1,b,c=1,d}b的值为2,d的值为2.(5)枚举类型与基础类型的转换基础类型不能隐式转换为枚举类型,枚举类型也不能隐式转换为基础类型示例:public enum Number{ a,b,c,d}class Test{ public static void Main(){ int i=Number.a;//错误,要强制类型转换(int)Number.aNumber n;n=2 //错误,要强制类型转换(Number)2}}(6)使用枚举类型using System;public enum TimeofDay{ Morning,Afternoon,Evening}class Test{ static void WriteGreeting(TimeofDay timeofDay){ switch(timeofDay){ case TimeofDay.Morning:Console.WriteLine("good morning");break;case TimeofDay.Afternoon:Console.WriteLine("good afternoon");break;case TimeofDay.Evening:Console.WriteLine("good evening");break;}}static void Main(){ WriteGreeting(TimeofDay.Morning);WriteGreeting(TimeofDay.Evening);WriteGreeting(TimeofDay.Afternoon);}}(7)c# 枚举定义前的[Flags]的目的
指示可以将枚举作为位域(即一组标志)处理。
例:
public enum EnumWithoutFlags:int
{ A=1, B=2}[System.Flags]
public enum EnumWithFlags:int{ A=1, B=2}当你输出:((EnumWithFlags)3).Tostring() 结果为:A,B
而: ((EnumWithoutFlags)3).Tostring() 结果为:3