Это вопрос, который у меня был на некоторое время:
Когда имеет смысл публиковать поле публично так?
public class SomeClass()
{
public int backing;
}
Недостаток этого (в дополнение к раздражающим элитаристам ООП) заключается в том, что вам необходимо внести изменения в свой API, если вам нужно добавить какую-либо логику поверх этих данных. Полагаю, это то, о чем говорят элитаристы.
Лучшей практикой в Java и С# уже давно является использование getters/seters или свойств для доступа к полям.
public class SomeClass()
{
private int backing;
public int getBacking()
{
return backing;
}
public void setBacking(int v)
{
backing = v;
}
}
С# превратил это в довольно простой синтаксис с автоматическими свойствами:
public class SomeClass()
{
public int Backing { get; set; }
}
Ленивый меня все еще чувствует, что это слишком долго, так как это то, что я нахожу, что делаю много. Что еще более важно, я не уверен, что знаю, где общественное поле будет иметь больше смысла.
Почему бы просто не рассматривать публично объявленные поля как свойства (или методы) за кулисами? Таким образом, невозможно было бы разгневать развязывание богов и немного набрать текст для загрузки.
public class SomeClass()
{
public int backing; // The same as public int backing { get; set; }
}
Для свойства, которое ничего не делает, кроме как обертывание базового поля, я уверен, что JIT оптимизирует вызов метода, поэтому производительность, вероятно, не является проблемой. Есть предположения? (кроме правильного случая для названия поля)
EDIT: Спасибо за все ответы. Я чувствую, что, возможно, не все понимают мой вопрос. Когда общественное поле будет лучшим выбором, чем собственность? Почему это лучший выбор? Если единственная причина - удобство (меньше ввода и беспорядок), то что будет недостатком того, чтобы компилятор генерировал свойство "под капотом" всякий раз, когда встречается публичное поле. В принципе, было бы невозможно создать истинное публичное поле (потому что все они были бы свойствами). Что было бы неправильно с этим? Спасибо.