Методы получения и установки значений свойств

Методы получения (чтения) и установки (записи) значений свойств подчиняются определенным правилам.

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

Пример:

Type TFigure = class FVisible: Boolean; ... procedure SetVisible (const AVisible: Boolean); ... property Visible: Boolean read FVisible write SetVisible; end;

Использование методов для получения и установки свойств позволяет проверить корректность значения свойства, сделать дополнительные вычисления, установить значения зависимых полей и т.д. Например, в методе SetVisible вполне целесообразно осуществить проверку состояния объекта (видим или невидим), чтобы избежать его повторного рисования или удаления с экрана:

procedure TFigure.SetVisible (const AVisible: Boolean);begin if Visible <> AVisible then // Если состояние изменяется begin if AVisible then Draw; // Нарисовать else Hide; // Убрать с экрана FVisible := AVisible; // Сохранение состояния в поле end;end;

Значение свойства может не храниться, а вычисляться при каждом обращении к свойству.

Пример:

TEllipse = class(TFigure) // эллипсPrivateFFocus:TCoordinates; function GetFocus2: TCoordinates; procedure SetFocus(const Value: TCoordinates); PublicProperty Focus1:TCoordinates read FFocus write SetFocus;Property Focus2:TCoordinates read GetFocus2; end;

Свойства-массивы

1. Кроме обычных свойств в объектах существуют свойства-массивы (array properties). Свойство-массив — это индексированное множество значений. Например, в классе TPolygon множество вершин удобно представить в виде свойства-массива:

Type TPolygon = class(TFigure) ... FPoints: array of TCoordinates; FPointsCount:word; ... function GetPoints(Index: Integer): TCoordinates; procedure SetPoints(Index: Integer; APoint:TCoordinates); ... property Points[Index: Integer]: TCoordinates read GetPoints write SetPoints; property PointsCount:word read FPointsCount write FPointsCount; end;... function TPolygon.GetPoints(Index: Integer): TCoordinates;begin Result := FPoints[Index];end; procedure TPolygon.SetPoints(Index: Integer; APoints: TCoordinates);begin FPoints[Index]:=APoints;end;

2. В описании свойства-массива разрешено использовать только методы, но не поля. В этом состоит отличие свойства-массива от обычного свойства.

3. Основная выгода от применения свойства-массива — возможность выполнения итераций с помощью цикла for, например:

Var Polygon: TPolygon; I: Integer;... for I := 0 to Polygon.PointsCount - 1 do Polygon.Points[I].x:=100*I; ...

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

5. Свойства-массивы имеют два важных отличия от обычных массивов:

их индексы не ограничиваются диапазоном и могут иметь любой тип данных, а не только Integer. Например, можно создать свойство-массив, в котором индексами будут строки. Обращение к такому свойству могло бы выглядеть примерно так:

Polygon.Points['First'].x := 100;

6. Операции над свойством-массивом в целом запрещены; разрешены операции только с его элементами.








Дата добавления: 2016-02-09; просмотров: 600;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.003 сек.