Прежде всего, соглашение об именах: используйте PascalCase для имени свойства, как и в методах. Кроме того, свойства не должны содержать очень сложные операции. Это должно быть сделано в методах.
В ООП вы бы описали объект как имеющий атрибуты и функциональность. Вы делаете это при разработке класса. Рассмотрим проектирование автомобиля. Примерами функциональности могут быть возможность куда-то перемещаться или активировать дворники. В вашем классе это будут методы. Атрибутом будет количество пассажиров в автомобиле в данный момент. Без свойств у вас было бы два способа реализовать атрибут:
Сделать переменную общедоступной:
// class Car
public int passengerCount = 4;
// calling code
int count = myCar.passengerCount;
У этого есть несколько проблем. Прежде всего, это не совсем атрибут автомобиля. Вы должны обновить значение внутри класса Car, чтобы оно представляло истинное состояние транспортных средств. Во-вторых, переменная общедоступна и может быть записана в.
Второй вариант - это один использованный видли, т.е. г. в Java, где у вас нет свойств, как в c #:
Используйте метод для инкапсуляции значения и, возможно, сначала выполните несколько операций.
// class Car
public int GetPassengerCount()
{
// perform some operation
int result = CountAllPassengers();
// return the result
return result;
}
// calling code
int count = myCar.GetPassengerCount();
Таким образом, вы можете обойти проблемы с публичной переменной. Запрашивая количество пассажиров, вы можете быть уверены, что получите самый последний результат, так как пересчитываете, прежде чем ответить. Кроме того, вы не можете изменить значение, так как метод не позволяет его. Проблема, однако, в том, что вы на самом деле хотели, чтобы количество пассажиров было атрибутом, а не функцией вашего автомобиля.
Второй подход не обязательно ошибочен, он просто не совсем правильный. Вот почему в некоторых языках есть способы сделать атрибуты похожими на переменные, даже если они работают как скрытые методы. Например, ActionScript также включает синтаксис для определения методов, к которым будет обращаться переменный стиль из вызывающего кода.
Имейте в виду, что это также несет ответственность. Вызывающий пользователь будет ожидать, что он будет вести себя как атрибут, а не функция. поэтому, если просто спросить у автомобиля, сколько пассажиров у него требуется 20 секунд для загрузки, то вам, вероятно, следует упаковать это в реальном методе, поскольку вызывающая сторона будет ожидать, что функции займут больше времени, чем доступ к атрибуту.
EDIT:
Я почти забыл упомянуть об этом: возможность на самом деле выполнять определенные проверки, прежде чем позволить переменной быть установленной. Просто используя открытую переменную, вы можете в нее записать что угодно. Метод или свойство установщика дает вам возможность проверить его перед его сохранением.