📌 1. 常量(const)→ 像「身份证号」一样不可变
现实例子:
你的 身份证号 一旦确定,这辈子都不能修改,它就是常量。
const string IDNumber = "110101199001011234"; // 常量,不可修改
const int MaxLoginAttempts = 3; // 最大登录尝试次数,固定为3
✅ 特点:
- 用
const
关键字声明 - 必须在声明时赋值
- 运行期间 不能修改,否则编译器报错!
⚠ 错误示例:
const int MaxAttempts = 3;
MaxAttempts = 5; // ❌ 编译错误!常量不能被修改
🔢 2. 整数常量 → 不带小数点的固定数字
现实例子:
5
(你一只手的手指数量)-10
(冰箱冷冻室温度)0
(银行存款清零警告⚠️)
C# 代码:
const int MaxStudents = 50; // 整数常量,班级最大人数
const int FreezingPoint = 0; // 水的冰点
✅ 特点:
- 必须是整数(如
5
、-3
、0
) - 不能带小数点(
3.14
就不是整数常量)
🔄 3. 常量 vs 变量(关键区别)
常量 (const ) |
变量 (int , string 等) |
|
---|---|---|
能否修改 | ❌ 永远不变 | ✅ 可以修改 |
声明方式 | const int x = 10; |
int x = 10; |
适用场景 | 固定值(如π、配置参数) | 会变化的值(如用户余额) |
变量示例:
int score = 100; // 变量
score = 95; // 合法,可以修改
🌟 4. 为什么用常量?
- 代码可读性:
MaxUsers = 1000
比直接写1000
更易懂 - 避免魔法数字:减少硬编码,方便修改(如调整
MaxRetryCount
只需改一处) - 防止意外修改:确保关键数值(如π=3.14)不会被篡改
错误示范(魔法数字):
if (attempts > 3) // ❌ 这个3是什么意思?不直观
{
Console.WriteLine("登录失败!");
}
优化(常量):
const int MaxLoginAttempts = 3; // ✅ 清晰定义
if (attempts > MaxLoginAttempts)
{
Console.WriteLine("登录失败!");
}
📜 5. C# 常量进阶(readonly vs const)
const |
readonly |
|
---|---|---|
赋值时机 | 编译时(声明时必须赋值) | 运行时(可在构造函数赋值) |
适用类型 | 基本类型(int, string) | 任何类型(如对象) |
内存位置 | 编译时直接替换 | 运行时读取 |
readonly 示例(更灵活的常量):
public class Config
{
public readonly int MaxConnections; // 运行时常量
public Config()
{
MaxConnections = 10; // 构造函数里赋值
}
}
总结:
const
常量 → 永远不变的固定值(如π、配置上限)- 整数常量 → 就是
5
、-3
、0
这类不带小数点的数字 - 优先用常量 代替魔法数字,让代码更健壮! 🚀
🌊 浮点常量 → 带小数点的“不整”数
现实例子:
3.14
(π,你吃披萨时要算的面积)-0.5
(冬天凌晨的气温)99.9℃
(发烧时的体温,差0.1度破百🔥)
C#代码示例:
const double Pi = 3.1415926; // 双精度浮点常量
const float Discount = 0.85f; // 单精度浮点常量(要加f后缀)
const decimal Money = 100.50m; // 高精度金融用(要加m后缀)
💡 为什么叫“浮点”?
因为小数点是**“浮动”的**,数字可以很大或很小:
0.000001
(蚂蚁的体重,千克单位)6.02e23
(阿伏伽德罗常数,科学计数法表示)
科学计数法示例:
const double Avogadro = 6.02e23; // 相当于 6.02 × 10²³
🆚 浮点 vs 整数常量
浮点常量(如3.14 ) |
整数常量(如5 ) |
|
---|---|---|
样子 | 带小数点(或科学计数法) | 不带小数点 |
用途 | 测量、金融、科学计算等需要精度的场景 | 计数、索引等整数量 |
C#类型 | double /float /decimal |
int /long |