Что лучше использовать и почему? 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 шт):
Когда ты используешь private переменные, то ты не захламляешь "интерфейс" класса лишней информацией.
Каждую публичную переменную ты должен проверять на корректность прежде чем использовать, а вот при работе с private переменной ты работаешь на своей территории и некоторые проверки ты можешь опустить.
Делая какие-то поля публичными, ты нарушаешь инкапсуляцию и дает представление о внутренней реализации класса.
В общем, публичным должно быть то, что действительно должно быть публичным.
[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 поля это исключительно внутренняя кухня класса.