只讀

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;
}