オブジェクト初期化子

プログラミングC# 第6版 3.7


オブジェクト生成時に生成側でオブジェクトの初期化のための処理を行うことができるというものみたいです。

using System;

class CSample {
    public int foo;
    public int bar;
}

class Program {
    static void Main () {
        // オブジェクト初期化子
        CSample cobj = new CSample() {
            foo = 1,
            bar = 2,
        };
        
        Console.WriteLine(cobj.foo);
        Console.WriteLine(cobj.bar);
    }
}
$ main
1
2

newの後に中括弧を付けて初期化したいフィールドやプロパティを指定するだけです。

処理順としては先にコンストラクタが呼ばれたあとにオブジェクト初期化子が実行されるみたいです。

と言うことは結局のところ、

class Program {
    static void Main () {
        CSample cobj = new CSample();
        // オブジェクト初期化子使わずに普通に値設定
        cobj.foo = 1;
        cobj.bar = 2;
        
        Console.WriteLine(cobj.foo);
        Console.WriteLine(cobj.bar);
    }
}

こう書くのと何が違うんだろう?

ちょっと用途が良くわからなかったけど、まぁこういう機能があるということで。