@Noortvel

Что лучше использовать для get set propeties или функции?

Что лучше использовать для get set propeties или функции?
  • Вопрос задан
  • 227 просмотров
Решения вопроса 1
Есть объект.
У объекта есть:
* Поля
 * Свойства
 * Методы
 * Конструкторы
 * События
 * Вложенные типы

**Поля**
Поле описывает и содержит часть состояния типа. Поля могут иметь любой тип, поддерживаемый средой выполнения. Поля чаще всего имеют уровень доступности private или protected, поэтому они доступны только изнутри самого класса или из производных от него классов. Если значение поля может быть изменено извне его типа, то для этого обычно используется метод доступа набора свойств.

**Свойства**
Свойство задает определенное значение или состояние типа, а также определяет методы получения и установки значения свойства. Свойства могут быть простыми типами, коллекциями простых типов, пользовательскими типами или коллекциями пользовательских типов. Свойства часто используются, чтобы обеспечить независимость общего интерфейса типа от фактической реализации данного типа. Это позволяет представлять с помощью свойств значения, которые не хранятся непосредственно в классе (например, когда свойство возвращает вычисляемое значение), либо выполнять проверку перед присваиванием значений закрытым полям.

**Методы**
Метод описывает операции, доступные в определенном типе. Сигнатура метода указывает допустимые типы всех его параметров и возвращаемого значения.

Выбор между свойствами и методами

В общем случае методы представляют действия, а свойства — данные. Свойства предназначены для использования в качестве полей; это означает, что свойства не должны быть сложными для вычисления или приводить к побочным эффектам. Когда это не нарушает приведенных ниже рекомендаций, следует использовать свойство, а не метод, так как менее опытные разработчики считают, что свойства проще использовать.

В следующих ситуациях используйте метод, а не свойство.
* Использование операции во много раз медленнее, чем использование метода для установки поля. Если даже вы собираетесь предоставить асинхронную версию операции с целью избежать блокирование потока, использование операции, вероятно, будет слишком затратным, чтобы быть свойством. В частности, операции, осуществляющие доступ к сети или файловой системе (в отличие от однократного доступа для инициализации), следует проектировать методами, а не свойствами.
* Операция является преобразованием, таким как Object.ToString method.
Каждый раз при вызове операция возвращает новый результат, даже если параметры не изменяются. Например, каждый раз при вызове метод NewGuid возвращает новое значение.
* Операция имеет существенный и наблюдаемый побочный эффект. Обратите внимание, что заполнение внутреннего кэша обычно не считается наблюдаемым побочным эффектом.
* Операция возвращает копию внутреннего состояния (не включаются копии объектов типа значения, возвращаемых на стеке).
* Операция возвращает массив.


Доступ к свойству такой же быстрый как доступ к полю если get;set; имеют простую реализацию и компилятор сделал инлайн оптимизацию, в которой вызов метода заменился его телом.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы