以下の内容はhttps://www.hanachiru-blog.com/entry/2023/05/01/120000より取得しました。


【C#】C#9.0から登場したコンストラクタ・オブジェクト初期化子のみで変更可能なinitアクセサーについて

はじめに

今回はC#9.0から登場したinitアクセサーについて取り上げたいと思います。
learn.microsoft.com

概要

initアクセサーを用いることでコンストラクタもしくはオブジェクト初期化子のときのみ変更できるようにできます。

class Sample
{
    public int Value { get; init; }

    public Sample() { }

    public Sample(int value)
    {
        // コンストラクタでの変更はOK
        Value = value;
    }

    static void Main(string[] args)
    {
        // オブジェクト初期化子もOK
        var sample = new Sample { Value = 10 };

        // コンストラクタ・オブジェクト初期化子以外はダメ(イミュータブル)
        // sample.Value = 20;
    }
}
変更方法 set/initなし init set
コンストラクタ
オブジェクト初期化子 ×
それ以外 × ×

サンプルコード

class Sample
{
    public int Value { get; }

    public Sample() { }

    public Sample(int value)
    {
        // コンストラクタでの変更はOK
        Value = value;
    }

    static void Main(string[] args)
    {
        // オブジェクト初期化子はダメ
        // var sample = new Sample { Value = 10 };

        // コンストラクタ・オブジェクト初期化子以外はダメ(イミュータブル)
        // sample.Value = 20;
    }
}
class Sample
{
    public int Value { get; set; }

    public Sample() { }

    public Sample(int value)
    {
        // コンストラクタでの変更はOK
        Value = value;
    }

    static void Main(string[] args)
    {
        // オブジェクト初期化子はOK
        var sample = new Sample { Value = 10 };

        // コンストラクタ・オブジェクト初期化子以外もOK
        sample.Value = 20;
    }
}



以上の内容はhttps://www.hanachiru-blog.com/entry/2023/05/01/120000より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14