C# 常量
文章目录
- 前言
- 一、整数常量
- (一)合法与非法实例对比
- (二)不同进制及类型示例
- 二、浮点常量
- 三、字符常量
- 四、字符串常量
- 五、定义常量
前言
在 C# 编程的世界里,常量是一类特殊的数据元素,它们如同程序中的 “定海神针”,代表着固定的值,在整个程序执行期间都不会发生改变。常量可以涵盖各种基本数据类型,包括整数常量、浮点常量、字符常量、字符串常量以及枚举常量等。
一、整数常量
整数常量在 C# 中有着丰富的表示形式,可以是十进制、八进制或十六进制的常量,并且可以通过特定的前缀来指定基数。其中,使用 0x 或 0X 作为前缀表示十六进制,以 0 作为前缀表示八进制,而没有前缀的情况下则默认表示十进制。
不仅如此,整数常量还能够添加后缀,后缀通常是 U(表示 unsigned,无符号)和 L(表示 long,长整型)的组合,它们既可以是大写形式也可以是小写形式,而且多个后缀能以任意顺序进行组合。不过需要注意的是,后缀的使用要遵循一定规则,不能随意重复或出现不符合语法规范的情况。
以下是各类整数常量的实例及详细解析:
(一)合法与非法实例对比
- 212: 这是一个合法的十进制整数常量,没有添加后缀时,默认的数据类型会根据其数值范围适配,在这里它可以被当作 int 类型来处理,在程序中可用于表示一般性的整数值,例如循环的次数、数组的索引等。
- 215u: 同样是合法的整数常量,后缀 u 表明它是一个无符号整数(unsigned int)类型,适用于那些只需要表示非负整数的场景,比如在处理内存地址、位掩码等情况时,无符号整数能更准确地反映数据特性。
- 0xFeeL: 合法的表示形式,前缀 0x 说明是十六进制数,后缀 L 则将其定义为长整型(long),在需要表示较大范围的整数且明确为长整型数据时会这样使用,比如在处理一些大型的计数或者标识时可能会用到长整型的十六进制数。
然而,也存在一些非法的实例: - 078: 是非法的八进制常量表示,因为在八进制数中,每位数字应该在 0 到 7 的范围内,而这里出现了数字 8,不符合八进制的语法规则,编译器在编译时会检测到这样的错误并提示。
- 032UU: 这种写法是非法的,因为不能重复使用后缀,后缀只是用于一次性地明确整数的类型修饰,重复添加会导致语法错误,无法通过编译。
(二)不同进制及类型示例
- 85: 这是一个典型的十进制整数常量,在日常编程中最为常见,可用于各种常规的整数运算场景,例如进行简单的数学计算、作为函数参数传递整数值等。
- 0213: 属于八进制整数常量,通过前缀 0 来标识,在一些特定的底层编程或者与硬件交互的场景中,如果硬件设备采用八进制来表示数据,那么在程序中就需要使用这样的八进制常量来与之匹配,进行数据的传递和处理。
- 0x4b: 是十六进制整数常量,十六进制常用于表示内存地址、颜色值(在图形编程中)等场景,因为它能够更紧凑地表示二进制数据,方便阅读和书写,例如在图形界面开发中,颜色的表示可能会采用十六进制形式来指定 RGB 各通道的值。
从数据类型角度来看: - 30: 默认会被当作 int 类型的整数常量,在没有后缀修饰的情况下,编译器会根据其数值范围将它归为 int 类型,适用于大多数一般性的整数使用场景,比如作为计数器的初始值等。
- 30u: 明确表示为无符号 int 类型,强调其只能表示非负整数,在涉及到位运算、内存相关操作等只需要处理非负整数的情况下使用。
- 30l: 通过后缀 l(或 L)定义为 long 类型,用于处理超出 int 类型表示范围的较大整数,例如在处理大型文件的字节数、数据库中的记录编号等可能较大的整数值时,就需要使用长整型常量。
- 30ul: 则是无符号长整型(unsigned long),集合了无符号和长整型的特点,用于表示较大范围的非负整数,在一些特定的系统编程或者大数据量处理场景中会发挥作用,比如在处理海量数据的索引或者标识时可能会用到。
二、浮点常量
浮点常量在 C# 中有着特定的组成结构,它是由整数部分、小数点、小数部分和指数部分共同构成的。在表示形式上,可以采用小数形式或者指数形式来呈现浮点常量,不过每种形式都有相应的语法要求需要遵循。
- 3.14159: 这是一个合法的采用小数形式表示的浮点常量,清晰地展示了整数部分、小数点以及小数部分,在数学计算、科学计算等涉及到带有小数精度的数值处理场景中经常会用到,比如在计算圆的面积(S = πr²,这里 π 可以用 3.14159 近似表示)时就会使用这样的浮点常量来参与运算。
- 314159E-5L: 同样是合法的,它采用的是指数形式,其中 E(也可以是 e)用于表示指数部分,这里 E-5 表示乘以 10 的 -5 次方,后缀 L 表示该浮点常量为长双精度浮点型(long double),在需要更高精度的浮点数值表示或者处理科学计数法表示的较大或较小数值时会采用这种形式,例如在物理计算中处理极小的物理量(如电子的电荷量等)或者极大的天文距离等情况时。
然而,存在一些不符合语法规则的非法实例: - 510E: 是非法的浮点常量表示,因为采用指数形式时,指数部分必须明确表示出指数的数值,这里只写了 E 却没有具体的指数值,不符合语法要求,编译器无法正确解析这样的表示形式。
- 210f: 也是非法的,它既没有小数部分也没有指数部分,单独一个整数后面跟着 f(通常用于表示单精度浮点型 float)不符合浮点常量的构成规则,要表示单精度浮点型常量需要有正确的小数或者指数形式,比如 210.0f 或者 2.1E2f 等形式才是合法的。
- .e55: 同样非法,因为使用指数形式表示时,必须包含整数部分、小数部分或同时包含两者,而这里缺少了整数部分,无法明确其具体数值含义,所以不符合浮点常量的语法规范。
三、字符常量
字符常量是括在单引号里,例如,‘x’,且可存储在一个简单的字符类型变量中。一个字符常量可以是一个普通字符(例如 ‘x’)、一个转义序列(例如 ‘\t’)或者一个通用字符(例如 ‘\u02C0’)。
在 C# 中,有一系列特定的字符在其前面带有反斜杠时会具有特殊的意义,这些转义序列码能够帮助我们在程序中方便地表示一些难以直接输入或者具有特殊功能的字符,以下是对部分转义序列及其含义的详细介绍:
以下是一个展示转义序列字符在实际代码中应用的实例:
namespace EscapeChar
{class Program{static void Main(string[] args){Console.WriteLine("Hello\tWorld\n\n");Console.ReadLine();}}
}
当上述代码被编译和执行时,会输出如下结果:
Hello World
在代码中,\t 起到了在 Hello 和 World 之间插入水平制表符的作用,使它们呈现出一定的间隔,看起来更像表格中的列对齐效果,而 \n 则实现了换行的功能,连续两个 \n 就产生了额外的空行,让输出的文本更加清晰美观,符合我们常见的文本展示习惯。
四、字符串常量
字符串常量在 C# 中的表示形式主要是括在双引号 “” 里,或者是括在 @“”(逐字字符串)里。字符串常量所包含的字符类型与字符常量类似,涵盖了普通字符、转义序列以及通用字符等多种形式,不过在使用和处理上有着自身的一些特点和优势。
- string a = “hello, world”;: 这是最常见的字符串常量表示形式,双引号内包含了普通的文本内容,用于表示一个简单的字符串,在程序中可以用于存储和展示文本信息,比如作为提示信息显示给用户(如在对话框中显示 “请输入用户名” 这样的提示语)、作为文件的名称、网页中的文本段落等各种涉及到文本处理的场景。
- string b = @“hello, world”;: 这里采用的是逐字字符串的表示形式,使用 @ 符号加上双引号。逐字字符串的特点是,其中的转义字符(如 \)会被当作普通字符对待,不会进行转义操作。例如,在表示文件路径时,使用逐字字符串会更加方便直观,像 string path = @“C:\Windows\System32”;,不需要像普通字符串那样将反斜杠进行转义(写成 C:\Windows\System32),这样可以避免因转义字符过多而导致的书写和阅读错误,尤其在处理较长的路径或者包含大量反斜杠的字符串时优势明显。
- string c = “hello \t world”;: 在这个字符串常量中,包含了转义序列 \t,它会在实际输出或者处理时被解析为制表符,所以当对这个字符串进行输出操作时,会在 hello 和 world 之间显示出一定的间隔,起到了格式化文本的作用,例如在控制台输出或者写入到文本文件中时,会呈现出类似表格列对齐的效果,让文本更加清晰有条理。
- string d = @“hello \t world”;: 同样包含 \t,但由于是逐字字符串,这里的 \t 就被当作普通的字符序列 \t 来处理,而不会转换为制表符,输出时就会直接显示 hello \t world,在一些需要将转义字符原样保留的场景中会使用这种表示形式,比如在处理正则表达式字符串、配置文件中的特定文本内容等情况下,需要转义字符不被解析而是作为原始字符存在。
- string e = “Joe said “Hello” to me”;: 为了在字符串常量中正确表示双引号字符,需要使用转义序列 ",这样才能将双引号作为字符串内容的一部分,避免与字符串的起始和结束双引号混淆,常用于表示包含引号的文本内容,比如记录对话、描述带有引号的语句等场景中,确保字符串能够准确地表达出完整的语义。
- string f = @“Joe said ““Hello”” to me”;: 在逐字字符串中,要表示双引号,只需要连续写两个双引号即可,同样能够实现将双引号作为字符串内容的一部分,而且写法更加直观,避免了转义序列的使用,在处理一些复杂的文本内容且其中包含较多双引号的情况下,逐字字符串的这种表示方式可以让代码更加清晰易读,减少因转义字符带来的混淆。
- string g = “\\server\share\file.txt”;: 在普通字符串中,如果要表示反斜杠字符,需要使用转义序列 \,所以这里连续的四个 \ 最终表示的是两个真实的反斜杠,用于构建正确的文件路径字符串,在涉及到网络共享文件路径、本地文件路径等需要准确表示反斜杠的场景中会这样书写字符串常量。
- string h = @“\server\share\file.txt”;: 而逐字字符串则直接使用 \ 就能表示两个反斜杠,更加简洁明了地呈现出文件路径的字符串内容,同样用于文件路径相关的场景,尤其是在代码中频繁使用文件路径字符串时,逐字字符串的便利性就更加凸显出来了。
- string i = “one\r\ntwo\r\nthree”;: 此字符串常量中
包含了 \r\n 转义序列,在输出时会按照回车换行的效果进行展示,比如在文本文件中写入这样的字符串或者在控制台输出时,会呈现出如下格式:
one
two
three
这在需要对文本进行分行排版,例如构建多行的提示信息、记录多行的数据内容等场景中十分常用,使得文本呈现出清晰的多行结构,方便阅读和查看。
- string j = @“one two three”;: 逐字字符串可以直接换行书写,换行符以及缩进空格都会计算在字符串长度之内,输出时也会按照书写的格式原样呈现,同样能达到分行展示文本的效果,并且在编写长文本内容时,这种直接换行的方式更符合书写习惯,使得代码看起来更加清晰直观,无需像普通字符串那样使用 \r\n 等转义序列来刻意控制换行,在一些配置文件内容设置、代码中的长文本注释等场景中应用较为方便。
五、定义常量
在 C# 中,常量是使用 const 关键字来进行定义的,其定义的语法如下:
const <data_type> <constant_name> = value;
这里 <data_type> 明确了常量的数据类型,它必须是一个合法的 C# 基本数据类型或者枚举类型等,比如 int、double、string、自定义的枚举类型等;<constant_name> 则是给常量所取的名称,需要遵循 C# 中变量命名的相关规则,例如变量名可以包含字母、数字和下划线,必须以字母或下划线开头,区分大小写,并且要避免使用 C# 的关键字作为变量名;value 就是赋予该常量的固定值,这个值一旦确定,在后续的程序执行过程中是无法修改的。
以下是一个代码示例,展示了如何在程序中定义和使用常量:
using System;public class ConstTest
{class SampleClass{public int x;public int y;public const int c1 = 5;public const int c2 = c1 + 5;public SampleClass(int p1, int p2){x = p1;y = p2;}}static void Main(){SampleClass mC = new SampleClass(11, 22);Console.WriteLine("x = {0}, y = {1}", mC.x, mC.y);Console.WriteLine("c1 = {0}, c2 = {1}",SampleClass.c1, SampleClass.c2);}
}
在上述代码中:
首先定义了一个名为 SampleClass 的内部类,在这个类中,除了定义了两个普通的整型成员变量 x 和 y 之外,还定义了两个常量 c1 和 c2。c1 被初始化为 5,而 c2 的初始化值是基于 c1 的值进行计算得到的(c1 + 5,也就是 10)。这里体现了一个重要特点,就是常量在定义时可以使用其他常量或者常量表达式来进行初始化,只要表达式中的值在编译时能够确定即可。
然后在 Main 方法中,创建了 SampleClass 的一个实例 mC,并给实例的 x 和 y 成员变量分别赋值为 11 和 22。接着通过 Console.WriteLine 语句分别输出了实例变量 x 和 y 的值,以及类中的常量 c1 和 c2 的值。
当整个代码被编译和执行时,会产生如下结果:
x = 11, y = 22
c1 = 5, c2 = 10
常量在程序中的作用不容小觑,它们能够提高代码的可读性和可维护性。例如,在一个数学计算相关的程序中,如果经常用到圆周率 π 的近似值,就可以定义一个常量 const double PI = 3.14159;,这样在整个程序的各个需要使用 π 值的地方,都可以直接使用这个常量,而不是每次都去写具体的数值。如果后续需要提高 π 的近似精度,只需要在定义常量的地方修改其值即可,其他使用该常量的代码无需变动,方便对代码进行统一的修改和维护。
相关文章:

C# 常量
文章目录 前言一、整数常量(一)合法与非法实例对比(二)不同进制及类型示例 二、浮点常量三、字符常量四、字符串常量五、定义常量 前言 在 C# 编程的世界里,常量是一类特殊的数据元素,它们如同程序中的 “定…...
diffusion model: prompt-to-prompt 深度剖析
参考:diffusion model(十四): prompt-to-prompt 深度剖析-CSDN博客 P2P提出的Motivation 目前大火的文生图技术(text to image),给定一段文本(prompt)和随机种子,文生图模型会基于这两者生成一张图片。生…...

uniapp实现APP版本升级
App.vue 直接上代码 <script>export default {methods: {//APP 版本升级Urlupload() {// #ifdef APP-PLUSplus.runtime.getProperty(plus.runtime.appid, (info) > {// 版本号变量持久化存储getApp().globalData.version info.version;this.ToLoadUpdate(info.versi…...

uniapp强制修改radio-group内单选组件的状态方法
在uniapp开发中,需要在radio-group内部切换时做判断,提醒客户是否要变换radio的值,但是大家知道radio是单选组件,往往你点击后,是不能再修改状态的,就算你在点击后做判断,修改current的值&#…...
学习python的第十四天之函数——高阶函数和偏函数
学习python的第十四天之函数——高阶函数和偏函数 高阶函数 高阶函数是指那些可以接受一个或多个函数作为参数,或者返回一个函数作为结果的函数。高阶函数是函数式编程范式中的一个重要概念,它们使得代码更加灵活和模块化。 sorted() sorted()函数用于对…...

数据结构之二叉树详解:从原理到实现
1. 什么是二叉树? 二叉树(Binary Tree)是一种树形数据结构,其中每个节点最多有两个子节点,分别被称为左子节点和右子节点。二叉树可以用来表示层次关系,如文件目录、组织结构,或用于快速查找、…...
iOS 系统中使用 webView 打印 html 的打印边距问题
需求是使用系统提供的打印功能将HTML代码打印出来 1、使用CSS page 设置边距(iOS不生效) page {margin: 0;padding: 0;size: A6 portrait; }在 Android 中边距设置生效的,但是在 iOS 系统使用CSS page规则是不生效的 当从 iOS 系统打印网页…...
如何在ubuntu上调试core dump
启用core dump 确认ulimit 状态 ulimit -c 如果输出是0,表示core dump被禁用了 运行 ulimit -c unlimited 再次运行 ulimit -c 确认输出是ulimited 设置core dump路径和文件名格式 下面命令表示设置core dump文件在当前目录(%e表示程序名&#x…...

基于 JNI + Rust 实现一种高性能 Excel 导出方案(上篇)
每个不曾起舞的日子,都是对生命的辜负。 ——尼采 一、背景:Web 导出 Excel 的场景 Web 导出 Excel 功能在数据处理、分析和共享方面提供了极大的便利,是许多 Web 应用程序中的重要功能。以下是一些典型的场景: 数据报表导出&am…...

【Maven】依赖管理
4. Maven的依赖管理 在 Java 开发中,项目的依赖管理是一项重要任务。通过合理管理项目的依赖关系,我们可以有效的管理第三方库,模块的引用及版本控制。而 Maven 作为一个强大的构建工具和依赖管理工具,为我们提供了便捷的方式来管…...
springboot/ssm高校超市管理系统Java商品出入库供应商管理系统web源码wms
springboot/ssm高校超市管理系统Java商品出入库供应商管理系统web源码wms 基于springboot(可改ssm)vue项目 开发语言:Java 框架:springboot/可改ssm vue JDK版本:JDK1.8(或11) 服务器:tomcat 数据库&a…...

小程序-基于java+SpringBoot+Vue的微信小程序养老院系统设计与实现
项目运行 1.运行环境:最好是java jdk 1.8,我们在这个平台上运行的。其他版本理论上也可以。 2.IDE环境:IDEA,Eclipse,Myeclipse都可以。推荐IDEA; 3.tomcat环境:Tomcat 7.x,8.x,9.x版本均可 4.硬件环境:…...

宠物电商对接美团闪购:实现快速配送与用户增值
随着宠物行业的快速发展,宠物电商市场也在不断扩张。消费者的需求不再局限于传统的线上购物模式,越来越多的人开始追求更快捷的配送服务和更优质的购物体验。为了适应这一趋势,许多宠物电商平台开始寻求与本地配送平台合作,以提供…...

Vue中使用<Transition>与<TransitionGroup>
目录 介绍 CSS过渡类 为过渡效果命名 CSS的transition CSS的transform 性能考量 出现时过渡 元素间过渡 过渡模式 使用Key属性过渡 和的区别 进入/离开动画 移动动画 一个购物车飞跃例子 介绍 传统HTML中,我们可以使用CSS属性:“animation”…...
Algorithms and Data Structures in C++ by Mohammed Yasir Eramangadan
MP4 创建 |视频:h264、1280720 |音频:AAC,44.1 KHz,2 通道 类型:在线学习 |语言:英文 字幕 |持续时间: 159 讲座 ( 10h 43m ) |大小: 3.5 GB “通过专家制作…...

2024广东省职业技能大赛云计算——构建CICD 部署2048小游戏
构建CI/CD 前言 题目如下: 构建CI/CD 编写流水线脚本.gitlab-ci.yml触发自动构建,具体要求如下: (1)基于镜像maven:3.6-jdk-8构建项目的drone分支; (2)构建镜像的名称:…...
React 条件渲染
React 条件渲染 React 条件渲染是一种在 React 应用程序中根据不同的条件显示不同组件或内容的技巧。它是 React 响应用户输入、状态变化或数据变化的核心机制之一。本文将深入探讨 React 条件渲染的概念、用法和最佳实践。 目录 条件渲染的基本概念使用 JavaScript 运算符进…...

Hadoop生态圈框架部署(九)- Hive部署
文章目录 前言一、Hive部署(手动部署)下载Hive1. 上传安装包2. 解压Hive安装包2.1 解压2.2 重命名2.3 解决guava冲突 3. 配置Hive3.1 配置Hive环境变量3.2 修改 hive-site.xml 配置文件3.3 配置MySQL驱动包3.3.1 下在MySQL驱动包3.3.2 上传MySQL驱动包3.…...

c语言的qsort函数理解与使用
介绍:qsort 函数是 C 标准库中用于排序的快速排序算法函数。它的用法非常灵活,可以对任意类型的元素进行排序,只要提供了比较函数即可。 qsort 函数原型及参数解释: void qsort ( void* base, //指向要排序的数组的首元素…...

Java 语言的起源发展与基本概念(JDK,JRE,JVM)
Java语言的起源 源起 Java语言最初是由Sun Microsystems公司(该公司于2009年被Oracle公司收购)开发的一种编程语言。其创造者是詹姆斯高斯林(James Gosling),他是一位加拿大计算机科学家。其前身名为Oak(橡…...

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析
1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具,该工具基于TUN接口实现其功能,利用反向TCP/TLS连接建立一条隐蔽的通信信道,支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式,适应复杂网…...
Go 语言接口详解
Go 语言接口详解 核心概念 接口定义 在 Go 语言中,接口是一种抽象类型,它定义了一组方法的集合: // 定义接口 type Shape interface {Area() float64Perimeter() float64 } 接口实现 Go 接口的实现是隐式的: // 矩形结构体…...
Java 加密常用的各种算法及其选择
在数字化时代,数据安全至关重要,Java 作为广泛应用的编程语言,提供了丰富的加密算法来保障数据的保密性、完整性和真实性。了解这些常用加密算法及其适用场景,有助于开发者在不同的业务需求中做出正确的选择。 一、对称加密算法…...

多种风格导航菜单 HTML 实现(附源码)
下面我将为您展示 6 种不同风格的导航菜单实现,每种都包含完整 HTML、CSS 和 JavaScript 代码。 1. 简约水平导航栏 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport&qu…...
全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比
目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec? IPsec VPN 5.1 IPsec传输模式(Transport Mode) 5.2 IPsec隧道模式(Tunne…...
重启Eureka集群中的节点,对已经注册的服务有什么影响
先看答案,如果正确地操作,重启Eureka集群中的节点,对已经注册的服务影响非常小,甚至可以做到无感知。 但如果操作不当,可能会引发短暂的服务发现问题。 下面我们从Eureka的核心工作原理来详细分析这个问题。 Eureka的…...

2025年渗透测试面试题总结-腾讯[实习]科恩实验室-安全工程师(题目+回答)
安全领域各种资源,学习文档,以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具,欢迎关注。 目录 腾讯[实习]科恩实验室-安全工程师 一、网络与协议 1. TCP三次握手 2. SYN扫描原理 3. HTTPS证书机制 二…...
【学习笔记】erase 删除顺序迭代器后迭代器失效的解决方案
目录 使用 erase 返回值继续迭代使用索引进行遍历 我们知道类似 vector 的顺序迭代器被删除后,迭代器会失效,因为顺序迭代器在内存中是连续存储的,元素删除后,后续元素会前移。 但一些场景中,我们又需要在执行删除操作…...

论文阅读:LLM4Drive: A Survey of Large Language Models for Autonomous Driving
地址:LLM4Drive: A Survey of Large Language Models for Autonomous Driving 摘要翻译 自动驾驶技术作为推动交通和城市出行变革的催化剂,正从基于规则的系统向数据驱动策略转变。传统的模块化系统受限于级联模块间的累积误差和缺乏灵活性的预设规则。…...

Unity VR/MR开发-VR开发与传统3D开发的差异
视频讲解链接:【XR马斯维】VR/MR开发与传统3D开发的差异【UnityVR/MR开发教程--入门】_哔哩哔哩_bilibili...