オブジェクト初期化子を使う理由
クラスや構造体のプロパティの数が多くなると、コンストラクタの引数の組み合わせパターンは膨大な数になってしまう。
オブジェクト初期化子を使えば、すべてのパターンのコンストラクタを定義しなくても、必要なプロパティのみを初期化することができる。
コンストラクタと併用することもできる。
オブジェクト初期化子を使うと、コンストラクタのパラメータ変数を用意する必要がなくなる。
また、プロパティにinitアクセサーを使った場合にもオブジェクト初期化子を使うことができる。
オブジェクト初期化子を使う
インスタンス生成時、中括弧内でプロパティ名に値を代入することで、インスタンス生成と同時にプロパティの初期化をすることができる。
1 2 3 4 5 |
var sr = new ProcessStartInfo("test.exe") { CreateNoWindow = true, RedirectStandardOutput = true }; |
以下はPointという独自クラスを作成した場合。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
internal class Point { public int X { get; set; } public int Y { get; set; } public Point() //引数なしのコンストラクタ { } public Point(int x,int y) { X = x; Y = y; } } |
1 2 3 4 5 |
var p1 = new Point { X = 3, Y = 4 }; var p2 = new Point() { X = 3, Y = 4 }; //p1,p2どちらの書き方でもOK //上記の場合、引数なしのコンストラクタが必要となる。 |
コメント