Подтвердить что ты не робот

Автоматическое свойство со значением по умолчанию

Возможный дубликат:
Как вы присвоите С# Auto-Property значение по умолчанию?

Есть ли хороший способ предоставить значение по умолчанию для автоматического свойства?

public int HowHigh { get; set; } // defaults to 0

Если я не установлен явно нигде, я хочу, чтобы это было 5. Знаете ли вы простой способ для этого? Например. Я мог бы установить его в конструкторе или что-то в этом роде, но это не изящно.

UPDATE: С# 6 получил: http://geekswithblogs.net/WinAZ/archive/2015/06/30/whatrsquos-new-in-c-6.0-auto-property-initializers.aspx

4b9b3361

Ответ 1

Если значение по умолчанию для типа недостаточно, то единственный способ сделать это - через конструктор.

Ответ 2

Нет, нет хорошего способа сделать это - в основном вы должны установить его в конструкторе, что не нравится.

Существуют различные ограничения для таких автоматических свойств, как это: моя самая большая проблема заключается в том, что не существует способа создать автоматическое свойство только для чтения, которое может быть установлено в конструкторе, но нигде (и не поддерживается полем readonly).

Ответ 3

Лучшее, что вы можете сделать, это установить его в конструкторе, вы не можете вносить изменения в автоматические свойства, вам понадобится резервное поле и в противном случае реализовать установщик/получатель.

Используя фоновое поле, вы можете написать примерно следующее:

private int _howHigh = 0;
public int HowHigh { get {return _howHigh; }  set { _howHigh = value; } }

Ответ 4

Одним словом: Нет.

Автоматические свойства - это один трюк-пони, как только вам потребуется что-то дополнительное (например, разумное значение по умолчанию), вы должны вернуться к регулярным свойствам поля поддержки.

Я пользователь Resharper, и он делает переход от автоматического к поддерживаемым свойствам легким.

Ответ 5

Конструктор НЕ является единственным вариантом, который у вас есть.

Я считаю, что это лучше всего:

private int m_HowHigh = 5; 
public int HowHigh { 
    get { return m_HowHigh; }  
    set { m_HowHigh = value; } 
} 

Я предпочитаю это для целей удобочитаемости больше, чем ctor().

Это НЕ то, что вы хотите:

[DefaultValue(5)]
public int HowHigh { get; set; }

Ссылка: http://msdn.microsoft.com/en-us/library/system.componentmodel.defaultvalueattribute.aspx#Y2248

Потому что это только украшение и не устанавливает значение (в С# 4).