Свойство (без дополнительной обработки) по сравнению с общедоступным полем [дубликат]

Запросы HTTPS не кэшируются настолько передающие , If-Modified-Since не имеет никакого смысла. Не кэширование является предосторожностью безопасности.

14
задан skaffman 13 August 2009 в 15:06
поделиться

4 ответа

Вы получаете исходную / двоичную совместимость, если позже вам понадобится добавить другое поведение, вы можете добавить точки останова, и это просто философски чище (заботьтесь о поведении, а не о механизме хранения).

Обратите внимание, что вам не нужен весь последний блок в C # 3:

public string CustomerName { get; set; }

См. мою статью «Почему свойства имеют значение» для получения дополнительной информации.

22
ответ дан 1 December 2019 в 09:02
поделиться
  1. Вы можете переопределить или хотя бы создать «новое» свойство в производном классе

  2. На этом этапе люди ожидают, что свойства будут открыты, а поля будут скрыты. Если кто-то собирается поразмыслить над вашим классом (это становится все более и более распространенным с такими инструментами, как Castle Windsor, NHibernate), есть огромная разница, они, скорее всего, не будут проверять открытые поля.

3
ответ дан 1 December 2019 в 09:02
поделиться

Это в основном ошибка Java. Во многих других языках (Python, Delphi, Groovy) компилятор сгенерирует для вас геттеры и сеттеры , если вы не предоставите код.

Это означает, что вы можете использовать «общедоступное» поле в Groovy и компилятор незаметно сгенерирует и вызовет установщик / установщик. Если вам нужно совершить дополнительную магию при изменении поля, вы можете ввести специализированный сеттер, и все будет работать.

Это одна из тех вещей, где реальность вступает в противоречие с замыслом. Разработчики Java не хотели, чтобы компилятор делал то, чего вы не видите. То, что много лет назад казалось хорошей идеей, оказалось не слишком удачным.

2
ответ дан 1 December 2019 в 09:02
поделиться

Вы также можете предоставить базовую проверку с помощью свойств. Например, чтобы предотвратить установку свойства в недопустимое состояние, например отрицательное значение высоты:

private int height;
public int Height
{
  get{ return height; }
  set 
  { 
     if (value > 0)
     {
         height = value;
     }
  }
}
1
ответ дан 1 December 2019 в 09:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: