6.6.2 Индексированные свойства

На верх  Назад  Вперёд

Если свойство содержит index (индекс), то читать и писать элементы можно также с помощью функций и процедур. Кроме значения свойства, эти функции требуют дополнительного параметра: целого числа (индекса). Это позволяет читать или писать этими методами несколько свойств. Для этого, свойства должны иметь один и тот же тип. Ниже приведен пример свойств с индексом:

{$mode objfpc}

Type

TPoint = Class(TObject)

Private

  FX,FY : Longint;

  Function GetCoord (Index : Integer): Longint;

  Procedure SetCoord (Index : Integer; Value : longint);

Public

  Property X : Longint index 1 read GetCoord Write SetCoord;

  Property Y : Longint index 2 read GetCoord Write SetCoord;

  Property Coords[Index : Integer]:Longint Read GetCoord;

end;

 

Procedure TPoint.SetCoord (Index : Integer; Value : Longint);

begin

Case Index of

  1 : FX := Value;

  2 : FY := Value;

end;

end;

 

Function TPoint.GetCoord (INdex : Integer) : Longint;

begin

Case Index of

  1 : Result := FX;

  2 : Result := FY;

end;

end;

 

Var

P : TPoint;

 

begin

P := TPoint.create;

P.X := 2;

P.Y := 3;

With P do WriteLn ('X=',X,' Y=',Y);

end.

Когда компилятор встречает присваивание полю X, то при вызове SetCoord в качестве первого параметра index (1 в приведенном выше примере) и в качестве второго параметра значение, которое нужно установить. И наоборот, при чтении значения X, компилятор вызывает GetCoord и передает ему index 1. Индексы могут быть только целые значения.