enum(C# 参考)

 
enum(C# 参考)

 

enum 关键字用于声明枚举,即一种由一组称为枚举数列表的命名常量组成的独特类型。

通常情况下,最好是在命名空间内直接定义枚举,以便该命名空间中的所有类都能够同样方便地访问它。但是,还可以将枚举嵌套在类或结构中。

默认情况下,第一个枚举数的值为 0,后面每个枚举数的值依次递增 1。例如:

 
enum Days {Sat, Sun, Mon, Tue, Wed, Thu, Fri};

在此枚举中,Sat0Sun1Mon2,依此类推。枚举数可以具有重写默认值的初始值设定项。例如:

 
enum Days {Sat=1, Sun, Mon, Tue, Wed, Thu, Fri};

在此枚举中,强制元素序列从 1 而不是 0 开始。但是,强烈建议枚举包含一个值为 0 的常量。有关更多信息,请参见枚举类型(C# 编程指南)

每种枚举类型都有基础类型,该类型可以是除 char 以外的任何整型。枚举元素的默认基础类型为 int。若要声明另一整型枚举,例如 byte,请在标识符之后紧跟类型,然后再使用冒号:

 
enum Days : byte {Sat=1, Sun, Mon, Tue, Wed, Thu, Fri};

准许使用的枚举类型有 bytesbyteshortushortintuintlongulong

可以给 Days 类型的变量赋以基础类型范围内的任何值,所赋的值不限于已命名的常数。

enum E 的默认值为表达式 (E)0 生成的值。

说明:

枚举数的名称中不能包含空白。

基础类型指定为每个枚举数分配的存储大小。但是,从 enum 类型到整型的转换需要用显式类型转换来完成。例如,下面的语句使用强制转换(从 enum 转换为 int)将枚举数 Sun 赋值给一个 int 类型的变量:

int x = (int)Days.Sun;

System..::.FlagsAttribute 应用于某个枚举时,如果该枚举包含一些使用按位 OR 运算组合的元素,这时您会注意到该属性在用于某些工具时会影响 enum 的行为。当使用诸如 Console 类方法、表达式计算器这样的工具时,可以注意到这些变化。(请参见示例 3)。

与任何常量一样,对枚举中各个值的所有引用在编译时均将转换为数值文本。这可形成潜在的版本控制问题,如常量(C# 编程指南)中所述。

给新版本的枚举赋其他值,或者更改新版本中枚举成员的值,可导致相关源代码出现问题。通常在 switch 语句中使用枚举值。如果 enum 类型中添加了其他元素,则默认值的测试可能会意外地返回 true。

如果其他开发人员将使用您的代码,您则需要提供相关说明,告诉开发人员如果任何 enum 类型中添加了新元素,他们的代码应该如何响应。

在此例中,声明了一个枚举 Days。两个枚举数被显式转换为整数并赋给整型变量。

C#
 
public class EnumTest
{
enum Days { Sun, Mon, Tue, Wed, Thu, Fri, Sat };
static void Main()
{
int x = (int)Days.Sun;
int y = (int)Days.Fri;
Console.WriteLine("Sun = {0}", x);
Console.WriteLine("Fri = {0}", y);
}
}
/* Output:
Sun = 0
Fri = 5
*/

在此例中,使用了基类选项来声明成员类型是 longenum。请注意,即使枚举的基础类型是 long,也仍然必须使用强制转换将枚举成员显式转换为 long 类型。

C#
  public class EnumTest2
{
    enum Range : long { Max = 2147483648L, Min = 255L };
    static void Main()
    {
        long x = (long)Range.Max;
        long y = (long)Range.Min;
        Console.WriteLine( "Max = {0}", x);
        Console.WriteLine( "Min = {0}", y);
    }
}
/* Output:
   Max = 2147483648
   Min = 255
*/



下面的代码示例阐释 enum 声明上的 System..::.FlagsAttribute 属性的使用和效果。

C#
 
[Flags]
public enum CarOptions
{
SunRoof = 0x01,
Spoiler = 0x02,
FogLights = 0x04,
TintedWindows = 0x08,
}
class FlagTest
{
static void Main()
{
CarOptions options = CarOptions.SunRoof | CarOptions.FogLights;
Console.WriteLine(options);
Console.WriteLine((int)options);
}
}
/* Output:
SunRoof, FogLights
5
*/

请注意,如果移除 FlagsAttribute,此示例的输出为:

5

5

转载于:https://www.cnblogs.com/ottox/archive/2009/03/03/1402426.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值