Новые автоматические свойства в C # 3.0, в чем преимущество?

В чем преимущество:

public string User {get; set;}

над

public string User;

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


person Community    schedule 15.10.2008    source источник


Ответы (2)


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

  • инкапсуляция
  • возможность добавить уведомление
  • инкапсуляция
  • способность делать валидацию
  • инкапсуляция
  • привязка данных
  • инкапсуляция
  • проверка безопасности

ой - а я упоминал инкапсуляцию?

Переход от поля к свойству постфактум является критическим изменением, особенно если вы используете много кода "ref" или изменяемых структур (да).

person Marc Gravell    schedule 15.10.2008
comment
Инкапсуляция также важна. Я удивлен, что вы не включили это в свой отличный список. - person Robert Rossney; 15.10.2008
comment
ах, плохо - я постараюсь вспомнить это в следующий раз ... - person Marc Gravell; 16.10.2008

При изменении значения User может потребоваться ряд действий. Вещи, о которых вы не знаете заранее или которых нет в то время, когда вы разрабатываете свои классы. Например, однажды вы понимаете, что значение пользователя должно быть не менее 5 символов. При наличии и собственности это несложно реализовать. Если у вас есть общедоступное поле, вы должны изменить его на свойство и перекомпилировать весь зависимый код.

По сути, я думаю, что стоит явно разделить общедоступную / API-часть наших типов и частные детали реализации.

Кто-то упомянул инкапсуляцию? ;)

person pero    schedule 15.10.2008