init (C# リファレンス)

C# 9 以降では、init キーワードによってプロパティ内またはインデクサー内で "アクセサー" メソッドが定義されます。 init のみのセッターでは、オブジェクトの構築時のみ、プロパティまたはインデクサー要素に値が割り当てられます。 これにより、オブジェクトが初期化されると、再び変更できなくなるように不変性が適用されます。

使用例を含む詳細については、「プロパティ」、「自動実装プロパティ」、および「インデクサー」を参照してください。

次の例では、YearOfBirth という名前のプロパティの get アクセサーと init アクセサーを定義しています。 また、_yearOfBirth という名前のプライベート フィールドを使って、プロパティの値を戻しています。

class Person_InitExample
{
     private int _yearOfBirth;

     public int YearOfBirth
     {
         get { return _yearOfBirth; }
         init { _yearOfBirth = value; }
     }
}

多くの場合、前の例のように、init アクセサーは値を割り当てる 1 つのステートメントで構成されます。 init のため、以下は機能しないことに注意してください。

var john = new Person_InitExample
{
    YearOfBirth = 1984
};

john.YearOfBirth = 1926; //Not allowed, as its value can only be set once in the constructor

init アクセサーは、式形式のメンバーとして使用できます。 例:

class Person_InitExampleExpressionBodied
{
    private int _yearOfBirth;

    public int YearOfBirth
    {
        get => _yearOfBirth;
        init => _yearOfBirth = value;
    }
}

init アクセサーは、次のコード例に示すように、自動実装プロパティでも使用できます。

class Person_InitExampleAutoProperty
{
    public int YearOfBirth { get; init; }
}

C# 言語仕様

詳細については、「C# 言語の仕様」を参照してください。 言語仕様は、C# の構文と使用法に関する信頼性のある情報源です。

関連項目