C# const 常量 / readonly 只读 / static readonly

一、三个关键字核心定义

1. const 常量

编译时常量,值在编译时就固定死,永远不能修改

2. readonly 实例只读字段

实例只读,只能在声明时、非静态构造函数赋值,运行时赋值

3. static readonly 静态只读字段

静态只读,只能在声明时、静态构造函数赋值,全局共享只读


二、代码逐行解析(核心规则)

cs 复制代码
public class People
{
    // 1. 实例只读字段
    public readonly int a = 10;

    // 2. 静态只读字段
    public static readonly int b = 20;

    // 3. 常量
    public const int c = 30;
}

1. const 常量特点

  • 默认自带 static(隐性静态)

  • 必须声明时直接赋值

  • 任何地方都不能二次修改

  • 调用方式:类名.常量名

2. readonly 实例只读字段

  • 属于对象(实例)

  • 赋值时机:声明时 / 非静态构造函数

  • 构造函数执行完毕后,彻底只读,无法修改

  • 不能在静态构造函数修改

3. static readonly 静态只读字段

  • 属于类,全局共享

  • 赋值时机:声明时 / 静态构造函数

  • 不能在普通构造函数修改

  • 静态构造函数只执行一次


三、赋值权限细则(必考)

1. readonly 实例只读

✅ 允许:声明赋值、普通构造函数赋值

❌ 禁止:方法中赋值、外部赋值、静态构造函数赋值

2. static readonly 静态只读

✅ 允许:声明赋值、静态构造函数赋值

❌ 禁止:普通构造函数赋值、方法赋值、外部赋值

3. const 常量

✅ 允许:仅声明时赋值

❌ 禁止:任何位置二次赋值(包括构造函数)


四、静态构造函数 专属知识点

cs 复制代码
// 静态构造函数:无修饰符、无参数、只执行一次
static People()
{
    b = 40; // 唯一可以修改静态只读的构造函数
    Console.WriteLine("静态构造函数只执行一次");
}

静态构造函数特点

  • 不能加任何访问修饰符(public / private 都不行)

  • 无参数、不能重载

  • 全局只执行一次

  • 触发时机:第一次 new 对象 / 第一次访问静态成员

  • 专门用来初始化 静态、静态只读 成员


五、外部访问规则

cs 复制代码
People p1 = new People();
//p1.a = 30; // 报错:只读字段无法修改

Console.WriteLine(People.b); // 静态只读 → 类名访问
Console.WriteLine(People.c); // 常量 → 类名访问
  • 实例只读 readonly:对象名访问,不可修改

  • 静态只读 / 常量:类名访问,不可修改


六、三者终极对比表(背诵版)

关键字 归属 可赋值位置 是否静态 修改权限
const 类(全局) 仅声明时赋值 默认静态 完全不可改
readonly 对象实例 声明、普通构造函数 非静态 构造后不可改
static readonly 声明、静态构造函数 静态 构造后不可改

七、满分必考口诀

  • const常量写死值,全程不能改

  • readonly实例只读,普通构造赋值

  • static readonly静态只读,静态构造赋值

  • 静态构造无修饰,全局一生只一次

  • 常量默认是静态,只能类名点调用

相关推荐
Zane199422 分钟前
遍历时删元素为什么报错:modCount 这个"计数器"在背后盯着你
java·后端
编码浪子44 分钟前
Rust 智能指针深度实战:Box/Rc/Arc/RefCell 选型决策与内存管理避坑
开发语言·后端·rust
yichudu1 小时前
Python 装饰器 decorator
开发语言·python
电商API_180079052471 小时前
速卖通商品采集API技术文章
java·开发语言·c++·api·跨境电商·商品详情
一晌小贪欢1 小时前
Python办公14:批量解压文件夹内的所有 ZIP/RAR 并自动分类
开发语言·python·excel·数据可视化·python办公
郑州光合科技余经理1 小时前
海外版外卖系统架构:订单怎么流转、权限怎么分
java·开发语言·前端·系统架构·uni-app·php·ai编程
Python 实战手记1 小时前
企业微信主体变更公证书办理全解析:适用场景、材料规范、踩坑点与Python信息校验脚本
开发语言·python·企业微信
longxiaozhang61 小时前
C#异常处理:程序出错了怎么办?
开发语言·数据库·c#
郝学胜-神的一滴1 小时前
Effective Python 条款 1:确认你正在使用的 Python 版本
开发语言·数据结构·python·程序人生·算法
一木 之林2 小时前
五、C++新特性、关键字与编译原理
java·jvm·算法