====== C# 常量 (Constants) ======
常量是编程中用于存储**固定值**的标识符。在程序执行期间,常量的值**不能被改变**。合理使用常量可以提高代码的可读性和可维护性,避免代码中出现“魔术数字”。
===== 1. 核心概念 =====
* **不可变性**:常量一旦定义并赋值,在后续的代码执行过程中无法修改。
* **类型支持**:常量可以是任何基本数据类型,例如整数 (`int`)、浮点数 (`double`, `float`)、字符 (`char`)、字符串 (`string`),也可以是枚举 (`enum`)。
* **编译时解析**:常量的值必须在编译时确定。
===== 2. 定义语法 =====
使用 ''const'' 关键字来定义常量。
**语法格式:**
const <数据类型> <常量名称> = <值>;
**注意事项:**
* 常量必须在声明时**立即初始化**(赋值)。
* 习惯上,常量名称通常使用 **PascalCase**(帕斯卡命名法)或者全大写(视团队规范而定)。
===== 3. 代码示例 =====
==== 基础数值常量 ====
这是最常见的使用场景,用于定义数学常数或配置阈值。
public class MathUtils
{
// 用户提供的示例:定义一个双精度浮点常量
public const double Pi = 3.125;
// 定义整型常量
public const int MaxRetryCount = 5;
}
==== 字符串常量与转义符 ====
在处理字符串常量时,C# 提供了两种方式:**常规字符串**和**逐字字符串**(Verbatim Strings)。
^ 类型 ^ 语法特征 ^ 示例 ^ 说明 ^
| **常规字符串** | 使用双引号 `""` | `"Hello\tWorld"` | 需要使用反斜杠 `\` 转义特殊字符(如换行、制表符)。 |
| **逐字字符串** | 使用 `@` 前缀 | `@"Hello World"` | 忽略转义符,字符串原样输出,常用于文件路径或多行文本。 |
**详细对比示例(参考图片内容):**
public void StringExamples()
{
// 1. 常规字符串:需要转义
// 输出: hello world (中间有制表符)
string c = "hello \t world";
// 2. 逐字字符串:原样输出
// 输出: hello \t world (直接输出字符 \t)
string d = @"hello \t world";
// 3. 处理双引号
// 常规:需要用 \" 表示引号
string e = "Joe said \"Hello\" to me";
// 逐字:需要用 "" (两个双引号) 表示一个引号
string f = @"Joe said ""Hello"" to me";
// 4. 处理文件路径 (最常用场景)
// 常规:必须使用 \\ 来表示反斜杠
string g = "\\\\server\\share\\file.txt";
// 逐字:直接书写路径,可读性更高
string h = @"\\server\share\file.txt";
// 5. 多行字符串
// 常规:需要使用 \r\n
string i = "one\r\ntwo\r\nthree";
// 逐字:直接换行书写
string j = @"one
two
three";
}
===== 4. 为什么要使用常量? =====
* **安全性**:防止程序在运行过程中意外修改关键数据。
* **可维护性**:如果 `Pi` 的精度需要调整,只需修改定义处的一行代码,所有引用该常量的地方都会自动更新。
* **可读性**:使用 `MaxRetryCount` 比直接在代码里写 `5` 更容易让人理解代码的意图。