0

Я еще начинающий разработчик, и очень хочу разобраться, зачем нужно использовать резервные поля вместе со свойством, если можно просто использовать автоматическое свойство?

Например, зачем мне делать так:

         private float _someValue;
         public float SomeProperty { get{return _someValue}; set{_someValue = value}; }

если можно использовать автоматическое свойство:

    public float SomeProperty { get; private set }

Я знаю, что под этим свойством спрятано поле, но зачем нагромождать кучу в коде? Инкапсуляцию это не нарушает. Да и к тому же свойства можно делать readonly:

    public float SomeProperty { get; }

И если я вообще не буду объявлять поля, обернется мне это как-нибудь в будущем?

        public static InputManager Instance { get; private set; }
        public EventSystem eventSystem { get; private set; }
        public CinemachineInputProvider CameraProvider { get; private set; }
        public bool TouchedUI { get; private set; } = false;
        public Vector3 ActiveTouchPosition { get; private set; } = Vector3.zero;

Заранее благодарю, правда хочется разобраться. На англоязычных форумах не совсем понял объяснения.

  • А теперь попробуйте в это свойство поместить какую-либо логику, например, чтоб оно также работало с get и set, но при set писало в консоль новое значение. Ну а так, это дубликат. – EvgeniyZ Feb 16 '22 at 14:01
  • Что касается unity, поле может быть необходимо для редактировании его в инспекторе [SerializeField] private float _someValue;. В иных случаях для инкапсуляции можно использовать публичное свойство с приватным сетером. – Yaroslav Feb 16 '22 at 15:31
  • Про Unity согласен полностью, как раз хотел об этом написать. Странно, что в одних классах свойства могут сериализоваться, а в других нет, хотя классы по сути ничем не отличаются. – Студент Feb 16 '22 at 19:06
  • Евгений, спасибо! Да, предварительная обработка спасает. Поэтому я и не вижу смысла в резервных полях. Очень сложно становится отслеживать, что вообще творится при большом количестве полей, даже с #region. – Студент Feb 16 '22 at 19:11
  • @Студент Если у вас поле, например, полностью публичное или полностью приватное (и геттер и сеттер) и вам не нужна предобработка (она не всегда нужна), то вы можете не писать {get;set;}, а если вдруг понадобится предобработка, то, соответственно, напишете его. Кстати, чтобы человек, к которому вы обратились, получил уведомление, нужно написать @ и его имя – Максим Фисман Feb 17 '22 at 17:05

0 Answers0