readonly与const区别?
-
readonly
关键字(运行时常量):字段可以在声明或构造函数中初始化,常作为运行时常量使用。 -
const
关键字(编译时常量):字段只能在该字段的声明时初始化,常作为编译时常量使用过。
C# 中的 readonly
和 const
都是用于声明常量的关键字,但它们之间存在一些关键的区别。
1. 初始化时机
const
必须在声明时初始化,且只能初始化为常量表达式。readonly
可以延迟初始化,可以在声明时初始化,也可以在构造函数中初始化。
2. 作用域
const
默认是静态的,只能在类级别声明。readonly
可以是静态的,也可以是实例的。
3. 存储方式
const
在编译时会被替换为实际值。readonly
在运行时存储在内存中。
4. 修改
const
一旦声明后不能修改。readonly
可以通过反射修改。
代码示例
// const 示例
public class ConstExample
{
public const int PI = 3.1415926535;
public void PrintPI()
{
Console.WriteLine(PI);
}
}
// readonly 示例
public class ReadonlyExample
{
public readonly int radius;
public ReadonlyExample(int radius)
{
this.radius = radius;
}
public void PrintArea()
{
Console.WriteLine(Math.PI * radius * radius);
}
}
总结
const
用于声明编译时常量,值在编译时确定,不能修改。readonly
用于声明运行时常量,值可以在运行时确定,可以被反射修改。
选择使用哪个关键字取决于具体需求:
- 如果需要声明一个编译时常量,使用
const
。 - 如果需要声明一个运行时常量,并且需要在构造函数中初始化,使用
readonly
。 - 如果需要声明一个可以被反射修改的常量,使用
readonly
。