仕様では必要ありません
構造体は、パラメーターを持つインスタンスコンストラクターを宣言できます。
必須ではありませ ん; したがって、パラメーターを受け取るコンストラクターの提供は完全にオプションです。デザイナーはそうしないことを選んだので、彼らにより多くの力があります;-)
他にどのような理由がありますか?
設計の簡素化?
フレームワークの設計者がコンストラクターを提供することを決定したことを少し想像してみましょう。
int myInt = new int(99999999999999999999999999999999999);
コンストラクターの複雑さが増しました。オーバーフローエラーを回避するには、指定された値の範囲を確認する必要があります。
したがって、単純化はコンストラクターを提供することに反対する議論でもあります。
この仕様では、「 simple-types 」のデフォルト値も定義されています。intの場合、0です。@KendallFreyが言及しているように、intのインスタンス化のための最適化がある可能性がありますが、それらには確かにコンストラクターがあります-値を0に初期化する暗黙のデフォルトのものです。IIRC(そして私がそれを掘ることができるかどうかを確認します後で)、単純型は実際にはメモリマネージャによってインスタンス化されます。ここに追加のコンストラクタロジックも問題を複雑にする可能性があります。
セマンティクスを実施しますか?
@ rich.okellyが言及しているように、int x = 12; ちょうどよく見えます。これは、値型のセマンティクスが値の直接割り当てを含むことを理解していることが多いためです。私の場合、参照型の代入var x = new RefType(); 割り当てと割り当てには異なるプロセスが発生していると常に推測してきました。初心者ユーザーは次のことを期待するかもしれません:
int x = new int(12);
と
XmlDocument x = new XmlDocument();
何らかの形で同等であるために。
ノート:
これがフレームワークにこれを実装した人以外の誰もが答えることができる質問だとは本当に信じていません。