码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • C# 图解教程 第5版 —— 第12章 枚举


    文章目录

      • 12.1 枚举
        • 12.1.1 设置底层类型和显式值
        • 12.1.2 隐式成员编号
      • 12.2 位标志
        • 12.2.1 Flags 特性
        • 12.2.2 使用位标志的示例(*)
      • 12.3 关于枚举的更多内容

    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
      }
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
    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 省略枚举名称
  • 相关阅读:
    git管理常用命令
    Spring(Spring的理解+DI+Spring的创建)
    H110主板搭配魔改QNCW升级小记
    编译GreatSQL with RocksDB引擎
    读《凤凰架构》- RPC的历史与知识
    关于软件物料清单(SBOM),你所需要了解的一切
    SEO效果又慢又差,为什么还会有SEO从业者?
    如何在IDEA中创建Module、以及怎样在IDEA中删除Module?
    java计算机毕业设计盘山县智慧项目管理系统源码+系统+数据库+lw文档+mybatis+运行部署
    Windows OpenGL ES 图像阴影
  • 原文地址:https://blog.csdn.net/zheliku/article/details/134093285
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号