在C#中,`const`和`readonly`是两个用于声明变量的关键字,但它们在使用和场景上有明显的区别。
### const 关键字
- **编译时常量**:`const` 关键字用于声明编译时常量。这些常量的值在编译时就必须确定,并且之后不能被修改。
- **静态值**:`const` 字段的值必须是编译时就能确定的字面量值或者由其他`const`字段计算得出的值。
- **隐式静态**:在C#中,`const` 字段是隐式静态的,不需要(也不能)显式声明为`static`。
- **用法示例**:
public class MyClass
{
public const int MaxItems = 100; // 编译时常量
}
### readonly 关键字
- **运行时只读**:`readonly` 关键字用于声明一个运行时只读的字段。这些字段的值可以在对象构造期间被赋值,但一旦对象被构造,其值就不能再被修改。
- **非静态**:`readonly` 字段可以是实例字段或静态字段,这取决于是否需要跨实例共享值。
- **赋值时机**:`readonly` 字段可以在声明时直接赋值,也可以在构造函数中赋值(对于实例字段)或在静态构造函数中赋值(对于静态字段)。
- **用法示例**:
public class MyClass
{
public readonly int MaxItems; // 运行时只读字段
public MyClass(int maxItems)
{
MaxItems = maxItems; // 在构造函数中赋值
}
// 静态 readonly 字段示例
public static readonly int StaticMaxItems = 50; // 静态只读字段,在声明时赋值
}
### 总结
- **`const`** 用于编译时常量,其值在编译时确定且不能修改,是隐式静态的。
- **`readonly`** 用于运行时只读字段,其值可以在构造期间赋值,但之后不能修改,可以是实例字段或静态字段。
希望这能帮助你更好地理解C#中的`const`和`readonly`关键字。