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