Поиск

Дополнительные возможности использования свойств.

Я уже обсудил следующие причины, которые делают полезными свойства:

  • они предоставляют клиентам более высокий уровень абстракции;
  • они обеспечивают универсальные средства доступа к членам класса с использованием синтаксиса объект.поле;
  • они позволяют классу гарантировать, что может быть выполнена любая дополнительная обработка при изменении или обращении к некоторому полю.

Третий пункт связан с еще одним полезным способом применения свойств — реализации отложенной инициализации (lazy initialization). При этой методике оптимизации некоторые члены класса не инициализируются, пока не потребуются.

Отложенная инициализация дает преимущества, если у вас есть класс с членами, на которые редко ссылаются и на инициализацию которых уходит много времени и ресурсов. Примерами этого могут служить ситуации, когда требуется считывание данных из БД или через перегруженную сеть. Поскольку вам известно, что на эти члены ссылаются редко, а их инициализация требует больших ресурсов, их инициализацию можно отложить до вызова их методов-получателей. Чтобы проиллюстрировать этот момент, допустим, что у вас есть приложение управления запасами, которое представители по продажам запускают на своих портативных компьютерах для размещения заказов клиентов, и время от времени используют его для проверки наличия товара. Используя свойства, вы можете разрешить создание экземпляров соответствующих классов, так чтобы при этом не считывались записи из БД, как показано в приведенном ниже коде. Когда представитель захочет узнать о количестве товара на складе, метод-получатель обратится к удаленной БД.

class Sku {
protected double onHand;
public string OnHand {
get
{
// Считать из центральной базы данных и установить
// значение onHand.
return onHand; } } }

Итак, свойства позволяют предоставлять методы-аксессоры для полей и универсальные, интуитивно понятные интерфейсы для клиента. Из-за этого свойства иногда называют "умными полями". А теперь рассмотрим способы определения и использования массивов на С#. Вы также узнаете, как свойства используются с массивами в виде индексаторов (indexers).