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, // 位 0LargePictures = 0b0010, // 位 1FancyNumbers  = 0b0100, // 位 2Animation     = 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 省略枚举名称

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/121661.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

学习Java应该关注哪些网站?

前言 下面是我总结的一些不错的网站,可以收藏看一下哈~希望对你有帮助 一、入门教程类 主要是教程性质的网站,主要是新手学习参考以及相关知识的内容参考 1、菜鸟教程(https://www.runoob.com) 2、Java学习笔记(http…

【c代码】【字符串数组排序】

实现字符串数组由小到大排序 代码如下 注意有句代码是strcpy(tmp,s[i]); →注意此是tmp和s[i]作比较 已调试√ #include<stdio.h> #include<string.h> int main() {char s[150][150];for(int i0;i<3;i){gets(s[i]); //注意是s[i] } //字符串数组从小到大排序 …

redolog和undolog

一、什么是redolog redolog是基于InnoDB存储引擎下的日志文件&#xff0c;也叫重做日志。用于记录数据页的物理变化&#xff0c;记录数据修改后的值。无论事务是否成功提交都会产生记录。当mysql产生故障&#xff0c;可以采用redolog日志恢复数据&#xff0c;同时redolog日志是…

PostGreSQL模式schema

问题引入 之前在做数据库设计时&#xff0c;经常会忽略schema模式&#xff0c;直接在数据库下的public模式下建立各类数据表。如果数据表命名不够规范&#xff0c;后期寻找某张表时就会比较麻烦。通过 所幸&#xff0c;PostgreSQL 的模式schema管理&#xff0c;可以对这个问题…

VTK OrientationMarker 方向 三维坐标系 相机坐标轴 自定义坐标轴

本文 以 Python 语言开发 我们在做三维软件开发时&#xff0c;经常会用到相机坐标轴&#xff0c;来指示当前空间位置&#xff1b; 坐标轴效果&#xff1a; 相机方向坐标轴 Cube 正方体坐标轴 自定义坐标轴&#xff1a; Code&#xff1a; Axes def main():colors vtkNamedC…

(四)库存超卖案例实战——优化redis分布式锁

前言 在上一节内容中&#xff0c;我们已经实现了使用redis分布式锁解决商品“超卖”的问题&#xff0c;本节内容是对redis分布式锁的优化。在上一节的redis分布式锁中&#xff0c;我们的锁有俩个可以优化的问题。第一&#xff0c;锁需要实现可重入&#xff0c;同一个线程不用重…

机器学习之朴素贝叶斯

朴素贝叶斯&#xff1a; 也叫贝叶算法推断&#xff0c;建立在主管判断的基础上&#xff0c;不断地进行地修正。需要大量的计算。1、主观性强2、大量计算 贝叶斯定理&#xff1a;有先验概率和后验概率区别&#xff1a;假如出门堵车有两个因素&#xff1a;车太多与交通事故先验概…

归结原理、归结演绎推理

主要内容 归结演绎推理范式子句与子句集将谓词公式转化为子句集命题逻辑鲁宾逊归结原理 归结演绎推理 定理证明的实质是对前提P和结论Q证明P →Q的永真性应用反证法&#xff0c;欲证明P →Q&#xff0c;只要证明 P∧~Q 等价于 F鲁宾逊归结原理对机械化推理有重大突破鲁宾逊归…

Linux—vmstat命令详解

vmstat概念 vmstat命令是 Virtual Meomory Statistics&#xff08;虚拟内存统计&#xff09;的缩写&#xff0c;可用来动态监控系统资源的 CPU 使用、进程状态、内存使用、虚拟内存使用、硬盘输入/输出状态等信息使用情况 vmstat下载 yum -y install sysstat vmstat命令参数…

XJ+Nreal 高精度地图+Nreal眼镜SDK到发布APK至眼镜中

仅支持Anroid平台 Nreal套装自带的计算单元&#xff0c;其实也是⼀个没有显示器的Android设备 新建unity⼯程&#xff0c;将⼯程切换Android平台。 正在上传…重新上传取消正在上传…重新上传取消 Cloud XDK Unity User Manual for Nreal ARGlasses 该XDK是针对 NReal AR 眼镜…

vue axios请求两种方式,出现401错误,需要添加config配置

file文件的转化 const uint8Array xxxxx;//总之先拿到uint8Array 格式的话 let mBuffer Buffer.from(uint8Array); //转buffer this.mBlob new Blob([mBuffer], { type: application/pdf;charsetutf-8 }); //这里是转blob this.mFile new File([this.mBlob], merged.pdf, …

网络基础-4

链路聚合技术 根据灵活性地增加网络设备之间的带宽供给增强网络设备之间连接的可靠性节约成本 链路聚合 是将两个或更多数据信道结合成一个单个的信道&#xff0c;该信道以一个单个的更高带宽的逻辑链路出现。链路聚合一般用来连接一个或多个带宽需求大的设备&#xff0c;例…

Vue $nextTick

我们用一个例子来说明$nextTick的作用&#xff1a; 我们用一个变量showIpt来控制input框的显示和隐藏&#xff0c;默认是隐藏。 我们点击一个按钮后显示这个输入框的同时&#xff0c;input还要自动获取焦点。 但是我们点击按钮过后并没有生效。 为什么&#xff1f;this.show…

【PG】PostgreSQL客户端认证pg_hba.conf文件

目录 文件格式 连接类型(TYPE) 数据库&#xff08;database&#xff09; 用户(user) 连接地址&#xff08;address&#xff09; 格式 IPv4 IPv6 字符 主机名 主机名后缀 IP-address/IP-mask auth-method trust reject scram-sha-256 md5 password gss sspi …

23种设计模式【创建型模式】详细介绍之【建造者模式】

建造者模式&#xff1a;构建复杂对象的精妙设计 设计模式的分类和应用场景总结建造者模式&#xff1a;构建复杂对象的精妙设计建造者模式的核心思想建造者模式的参与者Java示例&#xff1a;建造者模式 设计模式的分类和应用场景总结 可以查看专栏设计模式&#xff1a;设计模式 …

STM32中除零运算,为何程序不崩溃?

在 C 语言中&#xff0c;除零运算会导致异常吗&#xff1f; 在 C 语言中&#xff0c;当一个数除以零时&#xff0c;会导致除法运算错误&#xff0c;通常表现为“除以零”错误或被称为“浮点异常”&#xff08;floating-point exception&#xff09;。 对于整数除法&#xff0c…

RHCE---正则表达式

文章目录 前言一、pandas是什么&#xff1f;二、使用步骤 1.引入库2.读入数据总结 前言 一. 文本搜索工具 grep是linux中一种强大的文件搜索过滤工具&#xff0c;可以按照正 则表达式检索文件内容&#xff0c;并把匹配的结果显示到屏幕上 &#xff08;匹配的内容会标红&#x…

设计模式(15)组合模式

一、介绍&#xff1a; 1、定义&#xff1a;组合多个对象形成树形结构以表示“整体-部分”的关系的层次结构。组合模式对叶子节点和容器节点的处理具有一致性&#xff0c;又称为整体-部分模式。 2、优缺点&#xff1a; 优点&#xff1a; &#xff08;1&#xff09;高层模块调…

JAVA设计模式详解(独家AI解析)

JAVA设计模式详解&#xff08;独家AI解析&#xff09; 一、JAVA介绍二、JAVA设计模式六大原则三、JAVA设计模式介绍四、JAVA设计模式详解4.1 单例模式4.1.1 懒汉式&#xff08;Lazy Initialization&#xff09;4.1.2 饿汉式&#xff08;Lazy Initialization&#xff09; 4.2 代…

UE4/5 竖排文字文本

方法一、使用多行文本组件 新建一个Widget Blueprint 添加Text 或者 Editable Text(Multi-Line) 、TextBox(Multi-Line) 组件。 添加文字&#xff0c;调整字号&#xff0c;调整成竖排文字。 在Wrapping &#xff08;换行&#xff09;面板中 &#xff1a; 勾选 Auto Wrap te…