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