const 和 readonly 关键字都用于定义常量,但它们之间有一些重要的区别:
const:
- const 关键字用于定义编译时常量,其值在编译时就已经确定,并且不能在运行时修改。
- const 常量在声明时必须初始化。
- const 常量默认是静态的,因此它们在声明它们的类中的任何位置都可以使用,而不需要实例化类。
- const 常量的值在编译时被直接嵌入到使用该常量的地方。这意味着,如果一个 const 常量在一个库中被修改了,那么使用该库的所有客户端代码都需要重新编译以使用新的值。
示例:
csharp
public class MyClass
{
public const int MyConstant = 10;
}
// 在其他类中使用 const 常量
public class OtherClass
{
public void PrintConstant()
{
Console.WriteLine(MyClass.MyConstant);
}
}
readonly:
- readonly 关键字用于定义运行时常量,其值在运行时确定,并且只能在声明时或构造函数中初始化,初始化后就不能再修改。
- readonly 关键字可用于实例字段或静态字段。
- readonly 关键字允许在构造函数中初始化,这使得可以在构造函数中基于参数或其他条件设置常量的值。
示例:
csharp
public class MyClass
{
public readonly int MyReadOnlyField;
// 构造函数中初始化 readonly 字段
public MyClass(int value)
{
MyReadOnlyField = value;
}
}
// 在其他类中使用 readonly 字段
public class OtherClass
{
public void PrintReadOnlyField()
{
MyClass obj = new MyClass(20);
Console.WriteLine(obj.MyReadOnlyField);
}
}
如果你知道一个值在编译时就会被确定,并且不会更改,那么使用 const。
如果你需要一个值在运行时才能确定,并且在初始化后不会更改,那么使用readonly。