2013-03-23 8 views

答えて

27

これらにはコンストラクタがあるためです。

new operatorは、「this is reference type」を意味するものではありません。 「この型にはコンストラクタがあります」という意味です。 new何かを作成するとインスタンスが作成され、そうすることでコンストラクタが呼び出されます。

すべて値型と参照型にはコンストラクタがあります(型自体には何も定義されていない場合でも、デフォルトのコンストラクタでは引数はありません)。

+0

ありがとうございます。 Javaの場合、「すべての値と参照型にコンストラクタがあります」も真ですか? – Ben

+0

@Ben:Javaプリミティブ型にもコンストラクタがあることを理解しています。 – BoltClock

+0

ありがとうございます。しかし、なぜhttps://stackoverflow.com/a/47024170で 'new'を' int'に適用できないのですか? – Ben

3

MSDNのドキュメントではhereと表示されていますが、new演算子を使用して値型のデフォルトコンストラクタを呼び出します。

1

structを作成するためにnew演算子を使用する必要はありません。それを行うと、そのコンストラクタが呼び出されますが、そうでない場合、すべてのフィールドは未割り当てのままになります。

13

new演算子は、参照型にのみ使用できるわけではありません。これは値のタイプでも使用できます。 オブジェクト呼び出しコンストラクタを作成するために使用new Operator

から

すべての値型が暗黙的にパブリックデフォルトコンストラクタを持っているので、すべての値のタイプは、デフォルト値を持っています。 Default Values Tableを読むことができます。

たとえば、

int i = new int(); // i will be 0 for because its default values. 

struct typeのデフォルト値。

ヌルにデフォルト 値及び全ての参照型フィールドをするために、すべての値型フィールドを設定した値。 MSDNからも

あなたはnew演算子を使用して、構造体オブジェクトを作成

それが作成した を取得し、適切なコンストラクタがと呼ばれています。クラスとは異なり、new演算子を使用せずに 構造体をインスタンス化することができます。 newを使用しない場合、フィールドは未割り当てのままであり、オブジェクトはすべてのフィールドが初期化されるまで を使用できません。

+1

msdnリンクの場合、+1が高速です。おそらく '(v = vs.71)'部分を削除するでしょうか? –

+0

修正しましたが、+2にはできません。 –

4

整数も「新しい」ことができます。
違いはCANTが値で参照クラスを渡すことです。