《C#图解教程》拾遗十二-枚举

目录

一、枚举

1、设置底层类型和显式值

2、隐式成员编号

二、位标志

1、Flags特性

2、使用位标志的示例

三、关于枚举的更多内容


一、枚举

枚举是由程序员定义的类型,与类或结构一样:

  • 与结构一样,枚举是值类型,因此直接存储它们的数据,而不是分开存储成引用和数据;
  • 枚举只有一种类型的成员:命名的整数常量;

下面的代码展示了一个示例,声明了一个名称为TrafficLight的新枚举类型,它含有3个成员。注意成员声明列表是逗号分隔的列表,在枚举声明中没有分号。

enum TrafficLight
{
    Green,    //逗号分隔,没有分号
    Yellow,   //逗号分隔,没有分号
    Red
}

每个枚举类型都有一个底层整数类型,默认为int。

  • 每个枚举成员都被赋予一个底层类型的常量值;
  • 在默认情况下,编译器对第一个成员赋值为0,对每一个后续成员赋的值都比前一个成员多1;

例如,在TrafficLight类型中,编译器把int值0、1和2分别赋值给成员Green、Yellow和Red。在下面代码的输出中,把它们转换成类型int,可以看到底层的成员值。

enum TrafficLight
{
    Green,    //逗号分隔,没有分号
    Yellow,   //逗号分隔,没有分号
    Red
}
class Program
{
    static void Main(string[] args)
    {
        TrafficLight t1 = TrafficLight.Green;
        TrafficLight t2 = TrafficLight.Yellow;
        TrafficLight t3 = TrafficLight.Red;

        Console.WriteLine($"{t1}, \t{(int)t1}");
        Console.WriteLine($"{t2}, \t{(int)t2}");
        Console.WriteLine($"{t3}, \t{(int)t3}");
    }
}

 执行结果:

可以把枚举值赋给枚举类型变量。

static void Main()
{
    TrafficLight t1 = TrafficLight.Red;     //从成员赋值
    TrafficLight t2 = TrafficLight.Green;   //从成员赋值
    TrafficLight t3 = t2;                   //从变量赋值

    Console.WriteLine(t1);
    Console.WriteLine(t2);
    Console.WriteLine(t3);
}

执行结果:

注意,可以把成员字面量赋给变量,或从另一个相同类型的变量复制值。

注意,成员名被当作字符串打印。 

1、设置底层类型和显式值

可以把冒号和类型名放在枚举名之后,这样就可以使用int以外的整数类型。类型可以是任何整数类型,所有成员常量都属于枚举的底层类型。

enum TrafficLight : ulong    //设置底层类型
{
    ...

成员常量的值可以是底层类型的任何值,要显式地设置一个成员的值,在枚举声明中的变量名之后使用初始化表达式。尽管不能有重复的名称,但可以有重复的值,如下所示:

enum TrafficLight
{
    Green = 10,
    Yellow = 15,        //重复的值
    Red = 15            //重复的值
}

2、隐式成员编号

可以显式地给任何成员常量赋值,如果不初始化成员常量,编译器将隐式地给它赋一个值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值