2017-11-19 11 views
0

私はC#を初めて使用していて、WPFプロジェクトでLiveChartsを使用しようとしていました。残念ながら、最初の例では迷ってしまいましたが、私はこのアプローチについて他の言及を見つけることはできません。正直言って、私は正しい言葉で検索しているとは確信していません。これはC#のインスタンス化の別の方法ですか?

2番目のステートメントは最初のステートメントと同じですか?

いつ別のものを使用しますか?

私は精通しています方法:

SeriesCollection seriesCollection = new SeriesCollection(); 

私が理解するのに苦労していますコード:

void MyMethod() 
{ 
    SeriesCollection = new SeriesCollection { }; 
} 
public SeriesCollection SeriesCollection { get; set; } 
+0

1つはフィールドであり、宣言されているところでは初期化され、もう1つはプロパティであり、コレクションの初期化構文を使用してコンストラクタで初期化されます(初期要素はありません)。 – CodeCaster

答えて

2

は、第一の方法は、クラス変数を宣言して、新しいオブジェクトを割り当てそれ。

2番目のメソッドは、クラス内の宣言されたプロパティに新しいオブジェクトを割り当てます。このようになります。このタイプの短い形式があります:

public SeriesCollection SeriesCollection { get; set; } = new SeriesCollection(); 

メンバ変数とプロパティの違いがあり、それ以外の場合は、本質的には同じことです。

+0

このタイプの初期化は、.net –

+0

@GeorgeSarcasmGodの最新バージョンでのみ動作します。最新のC#言語バージョンが必要ですが、古いバージョンの.NET Frameworkでも動作します。 – yaakov

1

オブジェクトの初期化には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()方法を有し、空{}は、オブジェクト初期化子またはコレクション初期化子ですかどうかに関して曖昧であるタイプの場合には

が、オブジェクト以来プロパティを設定しないイニシャライザと、要素を追加しないコレクション初期化子は同じ結果を持ちますが、それは問題ではないあいまいさであり、許可されています。

スタイルの問題として、私は一般的に、空()の賛成で空{}に対してお勧めしますが、それはあなたがより頻繁に{}で初期化されているタイプだ場合は、空の{}は休みに合わせて、より多くのように見えることができますあなたのコードの。

関連する問題