Мутаторы (сеттеры) и аксессоры (геттеры) - это хитрый способ переопределить оператор присваивания. Итак, у вас есть публичное поле, classroomSize. Вы можете легко получить и установить его значение:
int localVariable = 3000000;
MyClass.classroomSize = localVariable;
localVariable = MyClass.classroomSize;
Но что если вы знаете, что во всей школе всего 300 стульев? Вы используете мутатор, чтобы ограничить значение присваивания значением <= 300. Используя мутатор, вам не нужно обременять пользователя вашего класса вызовом SetClassroomSize (300), и вместо этого им разрешается присваивать ваше свойство как поле. </p>
Это плохой пример для краткости. По правде говоря, вы, скорее всего, захотите создать исключение, когда размер класса превысил разумное значение, а не переопределять это значение. И бросать исключения внутри мутатора (или метода доступа) - это плохая форма. Таким образом, в этом случае вы фактически захотите создать метод SetClassroomSize (). Но вы поняли.
Что касается автоматического создания, которое не делает ничего, кроме установки и получения закрытого поля класса, в них мало значения, кроме, 1) они могут отображаться в пользовательских элементах управления, тогда как поле не может, 2) некоторые протоколы (COM). / DCOM?) Требуют их для назначения, 3) они предоставляют ограничения доступа (свойства ReadOnly и WriteOnly не имеют эквивалента в полях), 4) через шесть месяцев кому-то потребуется преобразовать ваши открытые поля в частные поля и создать средства доступа и мутаторы для всех из них и, вероятно, будут ругаться на то, что вам придется выполнять вашу рутинную работу.