资源描述:
《c#枚举类型概念和应用浅析》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、C#枚举类型概念及应用浅析C#枚举类型是什么呢?C#枚举类型是怎么使用的呢?C#枚举类型有什么需要注意的地方呢?那么本文就向你介绍这些内容。C#枚举类型(也称为枚举)为定义一组可以赋给变量的命名整数常量提供了一种有效的方法。例如,假设您必须定义一个变量,该变量的值表示一周中的一天。该变量只能存储七个有意义的值。若要定义这些值,可以使用枚举类型。枚举类型是使用enum关键字声明的。1.enum Days { Sunday, Monday, Tuesday, 2.Wednesday, Thursday,
2、 Friday, Saturday }; 3.enum Months : byte { Jan, Feb, Mar, Apr, 4. May, Jun, Jul, Aug, Sep, Oct, Nov, Dec }; 默认情况下,枚举中每个元素的基础类型是int。可以使用冒号指定另一种整数值类型,如前面的示例所示。以下是使用枚举而不使用数值类型的好处:明确为客户端代码指定哪些值是变量的有效值。在VisualStudio中,IntelliSense列出定义的值。如果不为枚举数列表中的元素指定值,则它们
3、的值将以1为增量自动递增。在前面的示例中,Days.Sunday的值为0,Days.Monday的值为1,依此类推。创建新的Days对象时,如果不显式为其赋值,则它将具有默认值Days.Sunday(0)。创建枚举时,应选择最合理的默认值并赋给它一个零值。这便使得只要在创建枚举时未为其显式赋值,则所创建的全部枚举都将具有该默认值。如果变量meetingDay的类型为Days,则只能将Days定义的某个值赋给它(无需显式强制转换)。如果会议日期更改,可以将Days中的新值赋给meetingDay:5.D
4、ays meetingDay = Days.Monday; 6.//... 7.meetingDay = Days.Friday; C#枚举类型说明:可以将任意整数值赋给meetingDay。例如,代码行meetingDay=(Days)42不会产生错误。但也不应该这样做,因为默认约定的是枚举变量只容纳枚举定义的值之一。将任意值赋给枚举类型的变量很有可能会导致错误。可以将任意值赋给枚举类型的枚举数列表中的元素,也可以使用计算值:8.enum MachineState 9.{ 10.PowerOff =
5、 0, 11.Running = 5, 12.Sleeping = 10, 1.Hibernating = Sleeping + 5 2.} C#枚举类型作为位标志可以使用C#枚举类型定义位标志,从而使该C#枚举类型的实例可以存储枚举数列表中定义的值的任意组合。(当然,某些组合在您的程序代码中可能没有意义或不允许使用。)创建位标志枚举的方法是应用System..::.FlagsAttribute属性并适当定义一些值,以便可以对这些值执行AND、OR、NOT和XOR按位运算。在位标志枚举中包含一个值为零
6、(表示“未设置任何标志”)的命名常量。如果零值不表示“未设置任何标志”,则请不要为标志指定零值。在下面的示例中,定义了Days枚举的另一个版本,即Days2。Days2具有Flags属性,且它的每个值都是2的若干次幂,指数依次递增。这样您就可以创建值为Days2.Tuesday和Days2.Thursday的Days2变量。3.[Flags] 4.enum Days2 5.{ 6.None = 0x0, 7.Sunday = 0x1, 8.Monday = 0x2, 9.Tuesday = 0x4,
7、10.Wednesday = 0x8, 11.Thursday = 0x10, 12.Friday = 0x20, 13.Saturday = 0x40 14.} 15.class MyClass 16.{ 17.Days2 meetingDays = Days2.Tuesday
8、 Days2.Thursday; 18.} C#枚举类型的问题:若要在某个枚举上设置标志,请使用逻辑OR运算符,如下面的示例所示:19.// Initialize with two flags using bitwise
9、OR. 20.meetingDays = Days2.Tuesday
10、 Days2.Thursday; 21.// Set an additional flag using bitwise OR. 22.meetingDays = meetingDays
11、 Days2.Friday; 23.Console.WriteLine("Meeting days are {0}", meetingDays); 24.// Output: Meeting day