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