5

()演算子を使用せずに、クラス名の後に初期化子リストを指定する場合があります。

Cat cat = new Cat { Age = 10, Name = "Fluffy" }

それ以外の場合は、()演算子の後に指定します。

List<Cat> cats = new List<Cat>
    {
        new Cat(){ Name = "Sylvester", Age=8 }
    }

違いは、ここでは新しいCat()がリスト内にあるためだと思います。しかし、なぜそれが違うのか私はまだ理解していません。では、なぜ違いがあり、いつどの構文を使用するのでしょうか。

ありがとう。

4

3 に答える 3

6

初期化子リストを使用する場合、パラメーターなしのコンストラクターを使用する場合は、()を省略できます。新しいCat()がリスト内にあるかどうかは関係ありません。

于 2013-01-20T10:09:36.717 に答える
6

()デフォルトの(パラメーターのない)コンストラクターがない場合、つまりパラメーターを指定する必要がある場合は、を指定する必要があります。

クラスにデフォルトのコンストラクター(またはパラメーターのないコンストラクター)がある場合、初期化子を使用するときはいつでも省略でき()ます。コンパイラはあなたのために魔法をかけます、そしてあなたは物事を次のように考えることができます-コンパイラはあなたのためにそれらを挿入します。

于 2013-01-20T10:09:44.920 に答える
0

2つのうちどちらを使用するかは実際には違いはありません。Catこれら2つのインスタンスを比較します。

var catA = new Cat();   // traditional constructor
catA.Name = "Mittens";  // set property

var catB = new Cat { Name = "Not Mittens" }; // all in one initializer

機能は同じですが、ショートカット表記です。最初の方法は従来の方法であり、ほとんどのオブジェクト指向(OO)言語はコンストラクターを使用してオブジェクトを作成します。C#は最近、オブジェクトを作成し、プロパティを設定してコードをよりクリーンにするこの新しいメソッドを追加しました。

クラスにパラメーターなしのコンストラクター(new())がない場合{...}でも、初期化を使用できます。

このことを考慮:

var dogA = new Dog("Fido");
var dogA.Age = 12;

var dogB = new Dog("Not Fido") { Age = 7 };

コンストラクターでパラメーターが必要な場合でも、パラメーターを指定する限り、このスタイルの初期化を使用できます。

于 2013-01-20T10:24:05.220 に答える