Я хотел спросить, в чем заключается идея того факта, что System.String не содержит конструктора без параметров.
Из-за этого вы не можете использовать этот тип при наличии ограничения new ().
ОБНОВЛЕНИЕ
Как вы думаете, почему новая строка () бесполезна и, например, new int () не бесполезен. Я действительно не вижу разницы. Я действительно хотел бы иметь возможность использовать ограничение new () для строки, поскольку я ожидаю String.Empty.
ОБНОВЛЕНИЕ2
Я знаю, что int - это тип значения, и все типы значений имеют конструктор без параметров по умолчанию. Я имел в виду ответ @John Saunders (и аналогичные ответы), в котором говорилось, что новый String () в основном не делает ничего полезного. Итак, если new String () не означает ничего полезного, что такого полезного в new int ()? Я также понимаю, что для типов значений важно иметь конструкторы без параметров по умолчанию. Более того, я думаю, что для строки было бы действительно хорошо иметь конструктор без параметров по умолчанию. Отсутствие конструктора без параметров означает для меня, что объект просто не может существовать без параметра, который будет его инициализировать. На мой взгляд, строка не нуждается в параметрах, потому что она может быть пустой. Я задал этот вопрос, потому что хотел узнать, есть ли какая-то важная причина, по которой строка не имеет конструктора без параметров, или это просто дизайн или что-то еще.
ОБНОВЛЕНИЕ3
Думаю, это будет последнее обновление, так как оно больше похоже на сообщение в блоге, чем на вопрос. В java строки также неизменяемы, и new String () совершенно законен. Однако в документации для конструктора без параметров говорится:
Инициализирует вновь созданный объект String, чтобы он представлял пустую последовательность символов. Обратите внимание, что в использовании этого конструктора нет необходимости, поскольку строки неизменяемы.
ОБНОВЛЕНИЕ4
Хорошо, последнее обновление;) Я должен согласиться с Джоном Сондерсом. Я использовал код с ограничением new (), и он отлично работал с пользовательскими классами. Затем моему коллеге нужно было изменить код для целых чисел, и все было в порядке. Затем замените его на строку, и у нас возникла проблема. Теперь, когда я думаю об этом, я думаю, что код, который мы используем, нужно изменить, чтобы отразить, что нам нужны скалярные типы, а не классы с конструктором без параметров. С учетом всего сказанного, я все еще считаю немного несогласованным, что вы можете написать new int () и вы не можете написать new string () (да, я понимаю, что int - это тип значения;)). Спасибо за все ваши ответы!
Заранее благодарим за помощь.
new MyEnum()
, но не строки! - person nawfal   schedule 23.04.2013