C#基础知识系列八const和readonly关键字详细介绍


在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`关键字。