在 C# 开发中,常量(Constant) 是非常重要的基础知识。常量是指在程序运行期间值不会发生改变的数据。合理使用常量不仅可以提高代码的可读性,还可以增强程序的安全性与可维护性。
本文将系统讲解 C# 常量的类型、语法规则、转义字符、字符串常量以及 const 的使用方式,适合初学者系统学习。
一、什么是常量?
常量是固定值,在程序执行期间不会改变。
常量可以是任何基本数据类型,例如:
- 整数常量
- 浮点常量
- 字符常量
- 字符串常量
- 枚举常量
常量和变量类似,不同点在于:常量一旦定义,其值不能被修改。
二、整数常量
整数常量可以使用以下三种进制表示:
| 进制 | 示例 | 说明 |
|---|---|---|
| 十进制 | 85 |
默认形式 |
| 八进制 | 0213 |
以 0 开头 |
| 十六进制 | 0x4b |
以 0x 或 0X 开头 |
1️⃣ 后缀说明
整数常量可以带后缀:
| 后缀 | 含义 |
|---|---|
| U / u | unsigned |
| L / l | long |
| UL / ul | unsigned long |
合法示例:
csharp
212
215u
0xFeeL
30ul
非法示例:
csharp
078 // 8 不是八进制数字
032UU // 后缀不能重复
三、浮点常量
浮点常量由:
- 整数部分
- 小数点
- 小数部分
- 指数部分
组成。
可以使用:
- 小数形式
- 科学计数法(指数形式)
合法示例:
csharp
3.14159
314159E-5
3.14f
非法示例:
csharp
510E // 指数不完整
210f // 没有小数点或指数
.e55 // 缺少整数或小数
⚠ 注意:
- 使用指数形式时必须完整
f表示 floatd表示 double(默认)m表示 decimal
示例:
csharp
float a = 3.14f;
double b = 3.14;
decimal c = 3.14m;
四、字符常量
字符常量使用单引号包围:
csharp
'x'
'\n'
'\t'
'\u02C0'
常见转义字符
| 转义符 | 含义 |
|---|---|
| \ | 反斜杠 |
| ' | 单引号 |
| " | 双引号 |
| \n | 换行 |
| \t | 制表符 |
| \r | 回车 |
| \b | 退格 |
| \f | 换页 |
| \v | 垂直制表 |
| \a | 警报 |
| \ooo | 八进制 |
| \xhh | 十六进制 |
示例代码
csharp
using System;
namespace EscapeChar
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hello\tWorld\n\n");
Console.ReadLine();
}
}
}
输出结果:
Hello World
五、字符串常量
字符串使用双引号:
csharp
"hello world"
也可以使用逐字字符串:
csharp
@"hello world"
普通字符串 vs 逐字字符串
| 写法 | 说明 |
|---|---|
"hello \t world" |
会解析转义字符 |
@"hello \t world" |
不解析转义字符 |
示例对比
csharp
string a = "hello, world";
string b = @"hello, world";
string c = "hello \t world";
string d = @"hello \t world";
输出区别:
c会产生制表符d会显示 \t
多行字符串
csharp
string text = @"one
two
three";
等价于:
csharp
string text = "one\r\ntwo\r\nthree";
六、使用 const 定义常量
在 C# 中使用 const 关键字定义常量。
语法:
csharp
const 数据类型 常量名 = 值;
示例代码
csharp
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);
}
}
输出:
x = 11, y = 22
c1 = 5, c2 = 10
七、const 和 readonly 的区别
| 对比项 | const | readonly |
|---|---|---|
| 是否编译期常量 | 是 | 否 |
| 是否必须初始化 | 必须声明时初始化 | 可以在构造函数中初始化 |
| 是否可以修饰引用类型 | 可以(字符串等) | 可以 |
| 是否隐式 static | 是 | 否 |
示例:
csharp
public class Test
{
public const int A = 10;
public readonly int B;
public Test()
{
B = 20;
}
}
八、最佳实践建议
✅ 适合使用 const 的场景:
- 数学常量
- 固定字符串
- 配置编号
- 不会变化的业务参数
❌ 不建议使用 const 的情况:
- 未来可能修改的值
- 来自数据库或配置文件的数据
- 运行时才能确定的值
九、总结
C# 常量是程序设计中的重要组成部分:
- 支持多种数据类型
- 支持多种进制
- 支持转义字符
- 使用
const关键字定义 - 提高代码安全性与可读性
掌握常量的使用,是迈向 C# 进阶开发的重要一步。