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. Операции над свойством-массивом в целом запрещены; разрешены операции только с его элементами.