Вы спрашивали себя почему вас всегда учили, что это хорошая идея сделать членов приватными?
Это потому, что (среди прочих причин) поля являются подробностями реализации . Детали «хранения данных в памяти», и это не важная деталь для любого объекта, который хочет получить или установить данные. Другому классу не нужно заботиться о том, может ли он где-нибудь получить доступ к некоторому слоту памяти - ему просто нужен интерфейс, для которого он может передавать или извлекать значение - есть методы получения и установки или свойства.
Выделив свойство из подробностей о «хранилище на основе памяти», мы получили большое количество преимуществ. В первую очередь - мы можем переопределить поведение получения и установки без нарушения какого-либо кода, который использует это свойство. Мы также можем использовать это свойство в качестве абстракции для извлечения данных из нескольких различных реализаций. Это становится чрезвычайно полезным для тестирования / насмешек и обеспечения альтернативного хранилища. Если другие классы зависят от деталей реализации «хранения памяти», вы не сможете изменить поведение вашего класса, не нарушив все это.
До появления авто свойств мы обычно сохраняли поле и создавали метод получения и установки для его инкапсуляции по причинам, описанным выше. Свойство auto автоматизирует это для нас. Мы могли бы написать код, который обычно использует поля повсюду в коде, но мы придерживаемся идеи: «Сейчас я сделаю это как поле, но это может измениться позже, если критерии изменятся».
Поскольку класс знает о своей собственной реализации, обычно создавать бессмысленные автоматические свойства бессмысленно, вы не скрываете детали, которые уже известны. Защищенные автоматические свойства могут быть полезны, если вам необходимо предоставить доступ к подклассам.
Что касается ситуаций, в которых их следует избегать: когда вам нужны данные только для чтения. (данные, которые не изменятся после создания объекта). Авто-свойствам не хватает синтаксиса, позволяющего создать автоматическое свойство, которое поддерживается данными только для чтения.