C#面试题更新 2026-08-05

C# 中的 readonly 修饰符与 const 关键字所声明的字段,在程序运行时分别是否允许被修改?请解释两者的区别及适用场景。

技术原理C#

考察说明

考查对 C# 中 const 和 readonly 关键字的理解,包括编译期常量与运行时常量的区别。

回答思路

  1. 【回答框架 1】const 字段是编译期常量,必须在声明时初始化,且其值在编译时确定。因此,const 字段在运行时绝对不能修改,任何修改尝试都会导致编译错误。
  2. 【回答框架 2】readonly 字段是运行时常量,可以在声明时或构造函数中初始化。对于 readonly 字段,在对象生命周期内,非静态 readonly 字段只能在构造函数中赋值,静态 readonly 字段只能在静态构造函数中赋值;一旦初始化完成后,运行时无法再次修改。
  3. 【回答框架 3】适用场景:const 用于真正的常量,如数学常数、固定配置值,且值不会变化;readonly 用于需要在运行时确定但初始化后不可变的值,比如依赖构造函数参数或计算结果的字段。
  4. 【回答框架 4】注意 readonly 字段如果是引用类型,则引用本身不可变,但对象内部状态可能可变;const 字段必须是编译期可确定的基本类型或字符串。
  5. 【关键点 1】const 在编译期确定,运行时不可修改。
  6. 【关键点 2】readonly 在运行时初始化后不可修改。
  7. 【关键点 3】readonly 可在构造函数中赋值,const 只能在声明时赋值。
  8. 【易错点 1】不要混淆 readonly 与普通可变字段,readonly 阻止的是字段重新赋值,而非对象状态改变。
  9. 【易错点 2】使用 const 时注意其编译期内联特性,可能导致版本更新问题。