Свойства - это полезный способ выражения свойства объекта, позволяющий получить / установить обычным способом, который может использоваться API-интерфейсами, такими как привязка данных, отражение и сериализация. Так что для простых значений объекта свойства удобны. Свойства не могут принимать аргументы, не должны иметь значительных побочных эффектов * и должны возвращаться быстро и многократно. Кроме того, не существует такой вещи, как «свойство расширения» (отражающее метод расширения) или универсальное свойство.
(* = ленивая загрузка и т. Д., Однако, не редкость)
Методы (C # не имеет функций) лучше подходят для выражения вещей, которые либо изменяют состояние, либо имеют ожидание занимает некоторое время и не обязательно воспроизводится. Они не работают при связывании / сериализации и т. Д.
Обратите внимание, что на самом деле свойства - это просто особый способ написания методов. Есть небольшая функциональная разница. Все дело в выражении намерений. Единственное, что вы не хотите раскрывать, это поля (фактическая переменная экземпляра intEmployeeAge
).
Итак, я бы получил:
public int EmployeeAge { get{return intEmployeeAge}; }
или просто (если в объекте Employee
):
public int Age { get{return intEmployeeAge}; }
Конечно ... тогда возникает вопрос: «В каких единицах?» Полагаю, это годы?
Если все, что вам нужно сделать, это вернуть значение, используйте свойство.
Если вам нужно сделать что-то перед возвратом значения, используйте функцию.
Свойства содержат данные объекта
Функции определяют поведение объекта
Взгляните на -> Рекомендации по использованию свойств
Какой лучше и почему? И что лучше всего использовать, когда у нас есть secnario, как указано выше?
Я пишу на C #, однако предпочитаю использовать функции Get / Set, для меня это просто лучший способ выразить то, что я могу получить от объект и как я могу изменить его состояние (и эти методы сгруппированы по алфавиту в Intelisense, что тоже хорошо). Однако, если команда предпочитает другие соглашения, это не проблема, но когда я работаю над собственными проектами, API просто читать легче.
e.g
Obejct1 o = new Object1();
o.P1;
o.P2;
o.P3;
глядя на API, вы не можете сказать, что вы меняете в общедоступном API или что это свойство только для чтения, если только вы не используете IDE, которая показывает вам небольшой значок, показывающий, что вы действительно можете сделать.
Object1 o = new Object1();
o.GetP1();
o.SetP2();
o.SetP3();
Из API легко узнать, как данные могут быть изменены клиентами типа.
Метод возвращает значения после завершения работы, и значение является результатом выполненной работы. Я не думаю, что вы это делаете.
Свойство (средство доступа) предназначено для возврата переменных, чего вы, кажется, и пытаетесь достичь:
Согласно MSDN :
Аксессор свойства содержит {{ 1}} исполняемые операторы, связанные с получением (чтением или вычислением) или установкой (записью) свойства. Объявления средств доступа могут содержать средство доступа , средство доступа set или и то, и другое. Объявления принимают следующие формы :
public int EmployeeAge
{
get;
set;
}
Иметь посмотрите здесь , так как там очень хорошо описано их использование.
Я думаю, это во многом связано с культурой, в которой вы программируете. На мой взгляд, культура C # / .NET предпочла бы использовать свойство для этого случая.
Мой совет: старайтесь соответствовать основным библиотекам, которые вы используете.
НО: Остерегайтесь использования свойств (или функций, которые служат той же цели, что и в приведенном выше примере), поскольку они часто являются признаком плохого дизайна. Вы хотите указать вашим объектам что-то делать, а не запрашивать у информацию. Не относитесь к этому религиозно, просто помните, что это запах кода.