2009-02-26 4 views
2

Если у вас есть объект, как это:По умолчанию значения свойства

public class Foo 
{ 
    private int _id; 

    public int id 
    { 
     get { return _id; } 
     set { _id = value; } 
    } 

    private string _name; 

    public string name 
    { 
     get { return _name; } 
     set { _name = value; } 
    } 
} 

И вы хотите инициализировать идентификатор -1 и имя, чтобы String.Empty, что является лучшей практикой? (И почему)

Выполнение:

private int _id = -1 

Или

Установка _id = -1 и имя = String.Empty в конструкторе?

+0

Это похоже на дубликат http://stackoverflow.com/questions/298183/c-member-variable-initialization-best-practice – aranasaurus

ответ

7

Это скорее вопрос стиля, чем что-либо еще. Есть только несколько случаев, когда это функциональный вопрос.

  1. Когда у вас есть много конструкторов, которые все инициализируют поля одним и тем же значением. В этот момент у вас есть избыточный код и должен либо реорганизовать ваши конструкторы, либо использовать инициализаторы полей.
  2. Не используйте инициализатор поля, если он зависит от значения другого поля в той же иерархии классов. В отсутствие частичных классов результат предсказуем, но все же может бросать людей на петлю.
+0

Я согласен, что это в основном стилистическая вещь. Самое важное соображение заключается в том, какой подход вы используете в своем приложении. – JohnFx

+0

@JohnFx, на самом деле я думаю, что получение согласия группы является самым важным. ;) – JaredPar

0

Установка его «inline», а не использование конструктора, мне кажется, чтобы указать намерение лучше. Функционально они одинаковы.

2

зависит от того, когда вы хотите, чтобы установить ...

private int _id = -1 

будет инициализировать _id до конструктор вызывается.

0

Мастер CLR может исправить меня, но я считаю, что эти два подхода функционально идентичны, но вы можете сделать аргумент, что установка значений по умолчанию в конструкторе более явная и очевидная, но также немного беспорядочная.

2

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

public Foo() { 
     Id = -1; 
     Name = ""; 
    } 
    public int Id {get;set;} 
    public string Name {get;set;} 

Вы также можете рассмотреть возможность использования [DefaultValue(-1)] и т. Д., Что помогает дизайнерам и сериализаторам, но это делает не влияет на начальное значение автоматически реализованного свойства (или обычного свойства) - это дополнительная информация.

0

Inline-инициализация добавляется в начало конструктора компилятором C#, поэтому нет никакой разницы. Лично я предпочитаю всегда добавлять конструкторы, даже если это только конструктор по умолчанию.

0

В основном речь идет о предпочтении стиля. Я обычно назначаю их в конструкторе, потому что это разумное место для всех данных и процедур, которые происходят при создании объекта.

Смежные вопросы