C# 設計委員会は、このオブジェクト作成構文を検討したことがありますか?
はい、私たちは持っている。数年前に検討しました。この主張の証拠として、私の記事の最後の段落を参照してください。
http://blogs.msdn.com/b/ericlippert/archive/2009/01/26/why-no-var-on-fields.aspx
設計チームのコンセンサスは、これは「あると便利な」機能であるが、機能の設計、実装、テスト、文書化、および保守にかなりのコストをかけるほど魅力的ではないというものでした。
また、リンク先のブログ エントリへのコメントは、この機能について非常に否定的です。多くの人が構文が魅力的でないと感じたようです。それはまた、機能を実行することに対するポイントでもありました。
ただし、提案された構文は、不変型の簡潔な宣言を促進する他の言語機能と組み合わせることができれば、特に優れたものになります。言語の仮想的な将来のバージョンでそのような機能を実行すると、提案する構文はより説得力のあるものになります。
さらに、私たちは一般に、「外側」から「内側」への推論を必要とする機能に抵抗することに注意してください。型情報が内側から外側に流れることを好みます。たとえば、次の問題を考えてみましょう。
M(new(blah));
M に 2 つのオーバーロードがあるとします。1 つは C を受け取り、もう 1 つは D を受け取ります。それは「新しい C(何とか)」または「新しい D(何とか)」ですか? どちらでもかまいません。ここで、両方を分析する必要があります。そして、両方が機能する場合は、どちらが優れているかを判断する必要があります.
ひどくなる。あなたが持っていると仮定します
M(new(new(blah)));
ここで、M は C と D を取り、C は E または F を取る 2 つのコンストラクターを持ち、D は G と H を取る 2 つのコンストラクターを持ちます。
M(new C(new E(blah)));
M(new C(new F(blah)));
M(new D(new G(blah)));
M(new D(new H(blah)));
選ばれていますが、その理由は?
外側から内側に推論すると、ネストの深さで分析するケースの数が O(c n ) になる「組み合わせ爆発」にすぐに陥ります。
C# はラムダに対してこの方法で推論を行います。これは、コンパイラーがパフォーマンスを向上させて正しくするのが最も難しい部分の 1 つです。同様の機能をコンストラクターに追加することに熱心ではありません。この構文を追加する場合、変数宣言または代入式の左側を分析することによって型が明確にわかっているシナリオに限定される可能性があります。
(いつものように、スケジュールや予算のない、発表されていない完全に架空の製品の架空の将来の言語機能に関するエリックの思索は、娯楽目的のためだけのものであり、特定の機能を備えた特定の将来の製品の約束として解釈されるべきではないことに注意してください設定。)