C# 图解教程 第5版 —— 第12章 枚举

本文介绍了C#中枚举的使用,包括设置底层类型、显式值和隐式编号,以及如何利用位标志实现位操作,重点讲解了Flags特性及其在格式化输出中的应用。还提到枚举成员的限制和C#新特性如usingstatic的使用。
摘要由CSDN通过智能技术生成

12.1 枚举

  • 枚举是值类型。
  • 只有一种类型的成员:命名的整数值常量。
    • 每个枚举成员都被赋予一个底层类型的常量值。
    • 默认情况下,第一个成员赋值为 0,后续成员的值依次递增 1。
    • 打印时将打印成员名称。
image-20231028161533867
图12.1 枚举声明

12.1.1 设置底层类型和显式值

​ 将冒号和类型名放在枚举名之后以设置底层类型:

image-20231028161915703
图12.2 设置底层类型

​ 尽管枚举类型不能有重复的名称,但可以有重复的值。

image-20231028162029209
图12.3 等价的枚举声明

12.1.2 隐式成员编号

image-20231028162144729 image-20231028162221241
图12.4 成员赋值的法则与示例

12.2 位标志

​ 枚举可实现位标志的应用:

  1. 选取足够长度的无符号类型作为枚举底层类型。

  2. 确定每个位置代表的含义。

    • 通常使用十六进制法。
    image-20231028162557336
    图12.5 位标志的枚举声明
    • C# 7.0 后可以使用二进制表示法。
    [Flags]
    enum CardDeckSettings : uint
    {
        SingleDeck    = 0b0001, // 位 0
        LargePictures = 0b0010, // 位 1
        FancyNumbers  = 0b0100, // 位 2
        Animation     = 0b1000, // 位 3
    }
    
image-20231028163212236
图12.6 标志位的定义(左)和各自代表的值(右)
  1. 使用按位或(|)运算符设置标志位。
image-20231028163259257
图12.7 使用按位或运算设置标志位
  1. 使用按位与(&)运算符或 HasFlag 方法检查是否设置了特定标志位。

    • HasFlag 方法。
    image-20231028163538165
    图12.8 使用 HasFlag 方法检查标志位
    • 按位与 &
    image-20231028163649526
    图12.9 使用按位与运算检查标志位

12.2.1 Flags 特性

​ Flags 特性不改变计算结果,其作用如下:

  • 通知编译器等工具,该枚举可以组成位标志。
  • 允许 ToString 方法提供更多的格式化信息。
image-20231028164138794
图12.10 代码示例

​ 对于上述代码,如果没有 [Flags] 特性,将会有如下输出:

image-20231028164308094
图12.11 无 Flags 特性的输出

​ 加上特性后,ToString 方法返回结果将会发生改变:

image-20231028164419127
图12.12 有 Flags 特性的输出

12.2.2 使用位标志的示例(*)

12.3 关于枚举的更多内容

  • 成员不能有修饰符。
    • 枚举成员的可访问性默认和枚举本身相同。
  • 成员是静态的,可以随时访问。
  • 比较不同的枚举类型会导致编译时错误。
  • C# 6.0 后,可以使用 using static 来省略枚举名称。
image-20231028164756381
图12.13 使用 using static 省略枚举名称
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蔗理苦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值