Различие между свойством и методом [дубликат]

12
задан abatishchev 30 March 2010 в 12:01
поделиться

6 ответов

Свойства - это полезный способ выражения свойства объекта, позволяющий получить / установить обычным способом, который может использоваться API-интерфейсами, такими как привязка данных, отражение и сериализация. Так что для простых значений объекта свойства удобны. Свойства не могут принимать аргументы, не должны иметь значительных побочных эффектов * и должны возвращаться быстро и многократно. Кроме того, не существует такой вещи, как «свойство расширения» (отражающее метод расширения) или универсальное свойство.

(* = ленивая загрузка и т. Д., Однако, не редкость)

Методы (C # не имеет функций) лучше подходят для выражения вещей, которые либо изменяют состояние, либо имеют ожидание занимает некоторое время и не обязательно воспроизводится. Они не работают при связывании / сериализации и т. Д.

Обратите внимание, что на самом деле свойства - это просто особый способ написания методов. Есть небольшая функциональная разница. Все дело в выражении намерений. Единственное, что вы не хотите раскрывать, это поля (фактическая переменная экземпляра intEmployeeAge ).

Итак, я бы получил:

public int EmployeeAge { get{return intEmployeeAge}; }

или просто (если в объекте Employee ):

public int Age { get{return intEmployeeAge}; }

Конечно ... тогда возникает вопрос: «В каких единицах?» Полагаю, это годы?

31
ответ дан 2 December 2019 в 03:18
поделиться

Если все, что вам нужно сделать, это вернуть значение, используйте свойство.

Если вам нужно сделать что-то перед возвратом значения, используйте функцию.

6
ответ дан 2 December 2019 в 03:18
поделиться

Свойства содержат данные объекта

Функции определяют поведение объекта

Взгляните на -> Рекомендации по использованию свойств

4
ответ дан 2 December 2019 в 03:18
поделиться

Какой лучше и почему? И что лучше всего использовать, когда у нас есть 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 легко узнать, как данные могут быть изменены клиентами типа.

2
ответ дан 2 December 2019 в 03:18
поделиться

Метод возвращает значения после завершения работы, и значение является результатом выполненной работы. Я не думаю, что вы это делаете.

Свойство (средство доступа) предназначено для возврата переменных, чего вы, кажется, и пытаетесь достичь:

Согласно MSDN :

Аксессор свойства содержит {{ 1}} исполняемые операторы, связанные с получением (чтением или вычислением) или установкой (записью) свойства. Объявления средств доступа могут содержать средство доступа , средство доступа set или и то, и другое. Объявления принимают следующие формы :

public int EmployeeAge
{
    get;
    set;
}

Иметь посмотрите здесь , так как там очень хорошо описано их использование.

1
ответ дан 2 December 2019 в 03:18
поделиться

Я думаю, это во многом связано с культурой, в которой вы программируете. На мой взгляд, культура C # / .NET предпочла бы использовать свойство для этого случая.

Мой совет: старайтесь соответствовать основным библиотекам, которые вы используете.

НО: Остерегайтесь использования свойств (или функций, которые служат той же цели, что и в приведенном выше примере), поскольку они часто являются признаком плохого дизайна. Вы хотите указать вашим объектам что-то делать, а не запрашивать у информацию. Не относитесь к этому религиозно, просто помните, что это запах кода.

0
ответ дан 2 December 2019 в 03:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: