Я читаю Эффективный С# Билл Вагнер. В пункте 14 "Сведение к минимуму дублирующей логики инициализации" он показывает следующий пример использования функции дополнительных необязательных параметров в конструкторе:
public MyClass(int initialCount = 0, string name = "")
Обратите внимание, что он использовал ""
вместо string.Empty
.
Он комментирует:
Вы отметите [в приведенном выше примере], что второй конструктор задал значение "" для значения по умолчанию для параметра имени, а не более обычного
string.Empty
. Это потому, чтоstring.Empty
не является константой времени компиляции. Это статическое свойство, определенное в классе строк. Поскольку он не является константой компиляции, вы не можете использовать его для значения по умолчанию для параметра.
Если мы не можем использовать статику string.Empty
во всех ситуациях, то разве это не побеждает ее цель? Я думал, что мы будем использовать его, чтобы быть уверенным, что у нас есть системно-независимое средство обращения к пустой строке. Я понимаю, что неправильно? Спасибо.
UPDATE
Просто комментарий. Согласно MSDN:
Каждый необязательный параметр имеет значение по умолчанию как часть своего определения. Если для этого параметра не отправляется аргумент, используется значение по умолчанию. Значения по умолчанию должны быть константами.
Тогда мы не сможем использовать System.Environment.NewLine
или использовать вновь созданные объекты как значения по умолчанию. Я еще не использовал VS2010, и это неутешительно!