Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Программирование на языке Delphi_2.doc
Скачиваний:
31
Добавлен:
28.03.2015
Размер:
494.59 Кб
Скачать

3.5. Свойства

3.5.1. Понятие свойства

Помимо полей и методов в объектах существуют свойства.

1. При работе с объектом свойства выглядят как поля: они принимают значения и участвуют в выражениях. Но в отличие от полей свойства не занимают места в памяти, а операции их чтения и записи ассоциируются с обычными полями или методами. Это позволяет создавать необходимые сопутствующие эффекты при обращении к свойствам. Создание сопутствующего эффекта достигается тем, что за присваиванием свойству значения стоит вызов метода.

2. Объявление свойства выполняется с помощью зарезервированного слова property:

property propertyName[indexes]: type index integerConstant specifiers;

Где:

  • propertyName – любой корректный идентификатор;

  • type – предопределенный или декларированный раньше тип;

  • specifiers – спецификаторы доступа;

  • [indexes] – необязательный параметр, который позволяет описать индексированное свойство (свойство-массив);

  • index integerConstant – необязательная секция, содержащая ключевое слово index и некоторую константу типа Integer (передается автоматически как параметр для методов, указанных в спецификаторах доступа), используется для методов, обслуживающих несколько свойств.

Простейший пример:

Type

Tfigure = class

private

Fcolor:TColor;

...

Protected

//Метод записи (установки значения)свойства

Procedure setColor(c:TColor); virtual;

Property Color: TColor

read Fcolor

write setcolor; // Свойство

end;

3. При объявлении свойства используются ключевые слова: read, write, stored, default (nodefault) и implements, которые называются спецификаторами доступа. Каждое свойство должно обязательно содержать хотя бы один из спецификаторов: read, write.

  • read – указывается поле или метод, к которому происходит обращение при чтении (получении) значения свойства. Например, чтение свойства Color означает чтение поля Fcolor.

  • write — поле или метод, к которому происходит обращение при записи (установке) значения свойства. Например, установка свойства — вызов метода SetColor.

  • stored –

4. Чтобы имена свойств не совпадали с именами полей, последние принято писать с буквы F (от англ. field).

5. Обращение к свойствам выглядит в программе как обращение к полям:

var

Fugure: TFigure;

...

Figure.Color := red; // Эквивалентно Figure.SetColor(red);

If Figure.Color = red then // Эквивалентно Figure.Fcolor;

ShowMessage(‘Красный’);

6. Если один из спецификаторов доступа опущен, то значение свойства можно либо только читать (задан спецификатор read), либо только записывать (задан спецификатор write). В следующем примере объявлено свойство, значение которого можно только читать.

7. В отличие от полей свойства не имеют адреса в памяти, поэтому к ним запрещено применять операцию @. Как следствие, их нельзя передавать в var- и out-параметрах процедур и функций.

8. Технология объектно-ориентированного программирования в среде Delphi предписывает избегать прямого обращения к полям, создавая вместо этого соответствующие свойства. Это упорядочивает работу с объектами, изолируя их данные от непосредственной модификации. В будущем внутренняя структура класса, которая иногда является достаточно сложной, может быть изменена с целью повышения эффективности работы программы. При этом потребуется переработать только методы чтения и записи значений свойств; внешний интерфейс класса не изменится.