C#では、構造体は値型ですが、参照型であるかのようにnew
することができます。どうしてこれなの?
コンストラクターがあるからです。
new
演算子 は「これは参照型です」という意味ではありません。 「この型にはコンストラクターがある」という意味です。何かをnew
すると、インスタンスが作成され、その際にコンストラクターが呼び出されます。
さらに言えば、all値型と参照型にはコンストラクターがあります(少なくとも、型自体が引数を定義していない場合、引数をとらないデフォルトのコンストラクター) 。
new
演算子は、参照型にのみ使用できることを意味するものではありません。 値型でも使用できます。
から 新しい演算子
作成に使用オブジェクトおよびコンストラクターの呼び出し。
すべての値型には暗黙的にパブリックデフォルトコンストラクターがあるため、すべての値型にはデフォルト値があります。 デフォルト値テーブル を読むことができます。
例えば;
int i = new int(); // i will be 0 for because its default values.
構造体タイプのデフォルト値。
すべての値型フィールドをデフォルト値に設定し、すべての参照型フィールドをnullに設定することによって生成される値。
また、From [〜#〜] msdn [〜#〜] :
New演算子を使用して構造体オブジェクトを作成すると、作成され、適切なコンストラクターが呼び出されます。クラスとは異なり、構造体はnew演算子を使用せずにインスタンス化できます。 newを使用しない場合、フィールドは割り当てられないままになり、すべてのフィールドが初期化されるまでオブジェクトを使用できません。
整数を「新規」にすることもできます。
違いは、参照クラスを値で渡すことができないことです。
正しいと書かれています here MSDNドキュメントでは、new
演算子を使用して値型のデフォルトコンストラクターを呼び出しています。
構造体を作成するためにnew演算子を使用する必要はありません。これを行うとコンストラクターが呼び出され、そうでない場合はすべてのフィールドが未割り当てのままになります。