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. Индексы могут быть только целые значения. |