Что лучше использовать и почему? Private/public переменные

Конечно, проще сделать так:

public int _maxHP;
public int _maxMana;

Но можно сделать так:

[SerializeField] private int _maxHP;
[SerializeField] private int _maxMana;

public int GetMaxHP { get { return _maxHP; } }
public int GetMaxMana { get { return _maxMana; } }

Стоит ли вообще заморачиваться и постоянно делать по второму способу?

P.S. данные постоянно используются то там, то сям в разных скриптах.


Ответы (2 шт):

Автор решения: iluxa1810

Когда ты используешь private переменные, то ты не захламляешь "интерфейс" класса лишней информацией.

Каждую публичную переменную ты должен проверять на корректность прежде чем использовать, а вот при работе с private переменной ты работаешь на своей территории и некоторые проверки ты можешь опустить.

Делая какие-то поля публичными, ты нарушаешь инкапсуляцию и дает представление о внутренней реализации класса.

В общем, публичным должно быть то, что действительно должно быть публичным.

→ Ссылка
Автор решения: Yaroslav

[SerializeField] только для тех полей, которые ты задаеш через инспектор, но не используются никем другим, как например ссылка на префаб [SerializeField] private GameObject _objectTamplate; или компоненты дочерних объектов в префабе [SerializeField] private Text _text.

public можно использовать по разному, например: public int Value { get; private set; } или protected set для наследников. В случаях когда, изменения только внутри класса и его кто-то должен читать, без возможности менять. Раздельные поле и свойство (get/set) только в случаях, когда поле сериализовано.

Для массивов изменяемых только внутри, но публично читаемые:

private String[] myArr = { "The", "quick", "brown", "fox" };
public IList<String> myList = Array.AsReadOnly(myArr);

private поля это исключительно внутренняя кухня класса.

→ Ссылка