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

news2024/9/21 22:33:27

文章目录

    • 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
    }
    
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.coloradmin.cn/o/1144372.html

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

相关文章

VS工程的“多dll与exe文件合并”

运行环境 ILMerge插件 1、打开 VS的“工具 - NuGet包管理器 - 管理解决方案的NuGet程序包” 2、在浏览中搜索“ILMerge”,在官方源中,3.0.41版本的插件已不支持使用了 3、下拉列表其他版本可以安装,使用3.0.40 4、下载封装好的“ILMerge”任…

Kotlin基础——变量、函数、字符串模板、类

变量 Kotlin和Java一样是静态语言,所有表达式类型在编译期已经确定,public为默认可见性 变量由 var/val变量名[: 数据类型][?][ 值] 组成,如 var a 1var b: Int b 3var s: String? nullval language arrayListOf("java")…

Kmeans算法的K值选择技巧【Elbow Method + Silhouette Score Method】

文章目录 一、方法简述二、使用到的数据集三、代码实现四、结论 一、方法简述 在Kmeans算法中最终聚类数量K的选择主要通过两个方法综合判断: Elbow Method 这是一种绘制k值范围的平方和的方法。如果此图看起来像一只手臂,则k是选择的类似肘部的值。从这…

走进人工智能的大门:打造职业梦想的契机

在当今数字化时代,人工智能(AI)不再是科幻小说的情节,而是我们现实生活和职业生涯中的现实部分。从自动驾驶汽车到智能助手,AI 的影响已经渗透到各个领域。而中国,作为全球人工智能市场的重要一员&#xff…

HTML简单实现v-if与v-for与v-model

Vue启动!! 首先VIewModel将View和Model连接一起,Model的数据改变View的数据也变 使用Visual Studio Code 启动Vue需要vue.js插件和导入CDN(包) vue.js插件:CTRL shift x 在搜索栏搜 索vue.js安装即可 CDN: http…

利用HTTP2,新型DDoS攻击峰值破纪录

亚马逊、Cloudflare 和谷歌周二联合发布消息称,一种依赖于 HTTP/2 快速重置技术的攻击行为对它们造成了破纪录的分布式拒绝服务 (DDoS) 攻击。 根据披露的信息,该攻击自8月下旬以来便一直存在,所利用的漏洞被跟踪为CVE-2023-44487&#xff0c…

花园这样去装,让户外空间更上一个层次

花园这样去装,让户外空间更上一个层次 园林设计师马修-布罗姆利(Matthew Bromley)说:”我深受法国和英国花园传统的影响,而这些客户想要的是一个能让人回想起在法国南部迷人的凉棚下度过的时光的空间。斑驳的树荫、燃烧…

关于Web应用和容器的指纹收集以及自动化软件的制作

一次对Web应用的渗透,九成都是从信息收集开始,所以信息收集就显得尤为重要。关键信息的收集可以使你在后期渗透的时候更加的得心应手,把渗透比喻成走黑暗迷宫的话,那信息收集可以帮你点亮迷宫的大部分地图。 信息收集涉及的点特别…

[Leetcode] 0094. 二叉树的中序遍历

94. 二叉树的中序遍历 题目描述 给定一个二叉树的根节点 root ,返回 它的 中序 遍历 。 示例 1: 输入:root [1,null,2,3] 输出:[1,3,2]示例 2: 输入:root [] 输出:[]示例 3: 输入&…

现代风格设计,大美至简!福州中宅装饰,福州装修

风格:现代 面积:70m 户型:住宅 现代风格设计是较为流行的风格 注重家居空间的布局与使用功能的结合 追求时尚和潮流 客厅空间 简约风格已经成为装修的一种流行趋势 讲究以简洁的视觉制造出简单的风格 客厅的空间整体户型 是纵向客餐厅…

【Python】一个句子中也许有多个连续空格,过滤掉多余的空格,只留下一个空格

题目要求:一个句子中也许有多个连续空格,过滤掉多余的空格,只留下一个空格 例:(为了方便观看,以 ▢ 代替空格) 输入:123▢▢abc▢▢▢python 输出:123▢abc▢python 参考…

vue源码分析(五)——vue render 函数的使用

文章目录 前言一、render函数1、render函数是什么? 二、render 源码分析1.执行initRender方法2.vm._c 和 vm.$createElement 调用 createElement 方法详解(1)区别(2)代码 3、原型上的_render方法(1&#xf…

轻量级仿 Spring Boot=嵌入式 Tomcat+Spring MVC

啥?Spring Boot 不用?——对。就只是使用 Spring MVC Embedded Tomcat,而不用 Boot。为啥?——因为 Boot 太重了:) 那是反智吗?Spring Boot 好好的就只是因为太重就不用?——稍安勿…

EfficientViT:高分辨率密集预测的多尺度线性关注

标题:EfficientViT: Multi-Scale Linear Attention for High-Resolution Dense Prediction 论文:https://arxiv.org/abs/2205.14756 中文版:【读点论文】EfficientViT: Enhanced Linear Attention for High-Resolution Low-Computation将soft…

Betaflight关于STM32F405 SBUS协议兼容硬件电气特性问题

Betaflight关于STM32F405 SBUS协议兼容硬件电气特性问题 1. 源由2. 储备知识2.1 三态逻辑(Tri-state Logic)2.1 上拉 (Pull-up)2.2 下拉 (Pull-down)2.3 Current Sink2.4 Current Source2.5 GPIO输入模式2.6 GPIO输出模式 3. FPV系统协议简介3.1 TX Protocols – communication…

Elasticsearch跨集群检索配置

跨集群检索字面意思,同一个检索语句,可以检索到多个ES集群中的数据,ES集群默认是支持跨集群检索的,只需要动态的增加入节点即可,下面跟我一起来体验下ES的跨集群检索的魅力。 Elasticsearch 跨集群检索推荐的是不同集群…

vue源码分析(一)——源码目录说明

文章目录 一、如何下载源码(可忽略)(1)打开地址(2)复制链接(3)git clone 链接 二、源码目录说明1.可以根据你下载的源码通过package.json文件查看vue版本2.源码目录说明 一、如何下载…

Java中作为数据库某个表的实体类为什么一定要实现Serializable接口

在Java中,实体类并不一定要实现 Serializable 接口来作为数据库的某个表的映射。这个接口的实现主要与对象的序列化和反序列化相关。序列化是指将对象的状态信息转换为可以存储或传输的形式的过程。在反序列化过程中,这些信息可以用来重构原始对象。 下面…

Go学习第十五章——Gin(参数绑定bind与验证器)

Go web框架——Gin(参数绑定bind与验证器) 1 bind参数绑定1.1 JSON参数1.2 Query参数1.3 Uri绑定动态参数1.4 ShouldBind自动绑定 2 验证器2.1 常用验证器2.2 gin内置验证器2.3 自定义验证的错误信息2.4 自定义验证器 1 bind参数绑定 在Gin框架中&#…

人工智能轨道交通行业周刊-第64期(2023.10.16-10.29)

本期关键词:北斗应用、供电智能运维、5G-R、铁路职称、星火大模型 1 整理涉及公众号名单 1.1 行业类 RT轨道交通人民铁道世界轨道交通资讯网铁路信号技术交流北京铁路轨道交通网上榜铁路视点ITS World轨道交通联盟VSTR铁路与城市轨道交通RailMetro轨道世界铁路那…