-
编译时常量 vs. 运行时常量:
const
定义的是编译时常量,这意味着它的值在编译时就已经确定,并且在程序的整个生命周期内都不会改变。const
字段通常是静态的,并且必须在声明时初始化。readonly
定义的是运行时常量,它的值可以在运行时初始化,但一旦初始化后就不能被修改。readonly
字段可以是静态的,也可以是实例的。
-
数据类型:
const
字段只能包含内置的值类型(如int
,double
,string
等)。readonly
字段可以是任何类型,包括引用类型。
-
初始化时机:
const
字段必须在声明时初始化。readonly
字段可以在声明时初始化,也可以在构造函数中初始化。
-
修改性:
const
字段一旦赋值后,其值不能被修改。readonly
字段一旦赋值后,其值也不能被修改,但它可以在构造函数中进行赋值。
-
作用域:
const
字段是静态的,可以在不创建类实例的情况下访问。readonly
字段可以是静态的也可以是实例的,静态的readonly
字段可以在不创建类实例的情况下访问,实例的则需要通过类实例来访问。
-
使用场景:
- 当你需要一个在程序中任何地方都不变的值时,使用
const
。 - 当你需要一个在对象构造时赋值,并且在之后不变,或者需要存储引用类型的值时,使用
readonly
。
- 当你需要一个在程序中任何地方都不变的值时,使用
public class MyClass
{
// const字段,编译时常量,必须在声明时初始化
public const int MyConstValue = 100;
// readonly字段,运行时常量,可以在声明时或构造函数中初始化
public readonly int MyReadOnlyValue;
public MyClass()
{
// 初始化readonly字段
MyReadOnlyValue = 200;
}
}