C#ジェネリックでは、と言うことで、型パラメーターの制約を宣言T
してデフォルトコンストラクターを持たせることができますwhere T : new()
。ただし、このような他の種類の制約は有効ではありません- new(string)
たとえば、など
言語設計および/または実装の観点から、この理由は何ですか?
コンストラクタの動作方法や、これを禁止する(または少なくとも難しくする)型システムの実装方法に何かありますか?もしそうなら、それは何ですか?default(T)
実際にコンパイルさnew T()
れた場所を読んだことを思い出しT : struct
ます。これと関係があるのでしょうか?
それとも、言語が複雑になりすぎないようにするために、単に設計上の決定を下しただけですか?
new(string)
デフォルトのコンストラクター制約ではありません。あなたの質問は、「特定のコンストラクター署名を必要とする制約がないのはなぜか」ということと同じです。そのような制約は特に有用ではないからです。