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