C#の構造体は値型ですが、参照型のようにnew
にすることができます。どうしてこれなの?構造体が値型の場合、なぜそれを新しいものにできますか?
答えて
これらにはコンストラクタがあるためです。
new
operatorは、「this is reference type」を意味するものではありません。 「この型にはコンストラクタがあります」という意味です。 new
何かを作成するとインスタンスが作成され、そうすることでコンストラクタが呼び出されます。
すべて値型と参照型にはコンストラクタがあります(型自体には何も定義されていない場合でも、デフォルトのコンストラクタでは引数はありません)。
MSDNのドキュメントではhereと表示されていますが、new
演算子を使用して値型のデフォルトコンストラクタを呼び出します。
structを作成するためにnew演算子を使用する必要はありません。それを行うと、そのコンストラクタが呼び出されますが、そうでない場合、すべてのフィールドは未割り当てのままになります。
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を使用しない場合、フィールドは未割り当てのままであり、オブジェクトはすべてのフィールドが初期化されるまで を使用できません。
msdnリンクの場合、+1が高速です。おそらく '(v = vs.71)'部分を削除するでしょうか? –
修正しましたが、+2にはできません。 –
整数も「新しい」ことができます。
違いはCANTが値で参照クラスを渡すことです。
コンストラクタは、オブジェクトが初期化されたとみなされる前にオブジェクトを混乱させる特別な特権を得る方法です。 – Tory