Рассматривал ли когда-либо комитет по проектированию C # этот синтаксис создания объекта?
Да, мы имеем.Мы рассмотрели это пару лет назад.В качестве доказательства этого утверждения см. Последний абзац моей статьи здесь:
http://blogs.msdn.com/b/ericlippert/archive/2009/01/26/why-no-var-on-fields.aspx
Консенсус команды разработчиков заключался в том, что это была функция "приятно иметь", но недостаточноубедительно, что это стоило значительных затрат на разработку, внедрение, тестирование, документирование и обслуживание этой функции.
Отмечу также, что комментарии к записи блога, на которую я ссылался, очень негативно относятся к этой функции;казалось, что многие находят синтаксис непривлекательным.Это также было против того, чтобы использовать эту функцию.
Тем не менее, предлагаемый синтаксис становится особенно приятным, если вы можете комбинировать его с другими языковыми функциями, которые способствуют краткому объявлению неизменяемых типов;если мы сделаем такую функцию в гипотетической будущей версии языка, то предлагаемый вами синтаксис станет более убедительным.
Отмечу далее, что мы в целом сопротивляемся особенностям, которые требуют вывода «извне» и «внутрь»;мы предпочитаем поток информации такого типа изнутри.Рассмотрим, например, эту проблему:
M(new(blah));
Предположим, что M имеет две перегрузки, одну, которая принимает C, и одну, которая принимает D. Является ли это "новым C (бла)" или "новым D (бла)?«?Это может быть либо.Теперь мы должны проанализировать оба!И если они оба работают, мы должны выяснить, что лучше.
Становится хуже.Предположим, у вас есть
M(new(new(blah)));
, где снова M принимает C и D, и C имеет два конструктора, которые принимают E или F, а D имеет два конструктора, которые принимают G и H. Какой из:
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 # обосновывает таким образом лямбды, и это - одна из самых сложных частей компилятора, чтобы сделать производительность и исправить, поверьте мне.Мы не стремимся добавить аналогичную функцию в конструкторы.Если бы мы добавили этот синтаксис, он, вероятно, был бы ограничен сценариями, в которых тип был однозначно известен путем анализа левой части объявления переменной или выражения присваивания.
(Как всегда, я отмечаю, что размышления Эрикао гипотетических будущих функциях языка в необъявленных и полностью вымышленных продуктах, которые не имеют расписаний или бюджетов, предназначены только для развлекательных целей и не должны рассматриваться как обещание какого-либо конкретного будущего продукта с каким-либо конкретным набором функций.)