只读

readonly 关键字是字段修饰符。当字段声明包含 readonly 修饰符时,对该字段的赋值只能作为声明的一部分或在同一个类的构造函数中出现。

readonly 关键字与 const 关键字不同。const 字段只能在字段声明时初始化。可以在声明或构造函数中初始化 readonly 字段。因此,readonly 字段可以具有不同的值,具体取决于所使用的构造函数。

注入依赖项时经常使用 readonly 关键字。

class Person
{
    readonly string _name;
    readonly string _surname = "Surname";

    Person(string name)
    {
        _name = name;
    }
    void ChangeName()
    {
        _name = "another name"; // Compile error
        _surname = "another surname"; // Compile error
    }
}

注意: 只读声明字段并不意味着不可变性。如果该字段是*引用类型,*则可以更改对象的内容Readonly 通常用于防止仅在实例化该对象期间覆盖和分配对象。 ****

注意:在构造函数内部,可以重新分配只读字段

public class Car
{
    public double Speed {get; set;}
}

//In code

private readonly Car car = new Car();

private void SomeMethod()
{
    car.Speed = 100;
}