オブジェクトの初期化には3つの構文があります。
var a = new A();
var b = new A(123);
オブジェクト初期化構文があります:
コンストラクタ呼び出しの構文があります
コード
var a = new A { Foo = 1, Bar = 2 };
です速記用:については
var a = new A();
a.Foo = 1;
a.Bar = 2;
ほとんどの場合、匿名型(非表示のコンストラクタが実際にヒットしたもの)を除いて、完全に同じように実行されます(空のコンストラクタが最初に呼び出され、次にプロパティが設定されます)。
あなたも組み合わせることができます2:あなたは{}
を使用しますが、あまりにも持っていない場合()
を除外するために許可されている
var a = new A(123){ Foo = 1 };
。
第三の方法は、コレクションのインスタンス化の構文は次のとおりです。と等価です
var l = new List<int>{1, 2, 3};
:
var l = new List<int>();
l.Add(1);
l.Add(2);
l.Add(3);
あなたは両方がIEnumerable
を実装し、適切な公共Add()
メソッドを持つ任意の型でこれを行うことができます。
これもコンストラクタ()
と組み合わせることができますが、空の場合は()
を省略することができます。両方の設定可能なプロパティを有し、またIEnumerable
を実装し、少なくとも一つのパブリックAdd()
方法を有し、空{}
は、オブジェクト初期化子またはコレクション初期化子ですかどうかに関して曖昧であるタイプの場合には
が、オブジェクト以来プロパティを設定しないイニシャライザと、要素を追加しないコレクション初期化子は同じ結果を持ちますが、それは問題ではないあいまいさであり、許可されています。
スタイルの問題として、私は一般的に、空()
の賛成で空{}
に対してお勧めしますが、それはあなたがより頻繁に{}
で初期化されているタイプだ場合は、空の{}
は休みに合わせて、より多くのように見えることができますあなたのコードの。
1つはフィールドであり、宣言されているところでは初期化され、もう1つはプロパティであり、コレクションの初期化構文を使用してコンストラクタで初期化されます(初期要素はありません)。 – CodeCaster