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