Specyfikatory indeksów


Specyfikatory indeksów pozwalają kilku właściwościom współdzielić te same metody dostępowe pomimo, że reprezentują różne wartości. Specyfikator indeksu składa się z dyrektywy index następującej po stałej typu integer o wartości między –2147483647 i 2147483647. Jeśli właściwość posiada specyfikator indeksu, jego specyfikatory read i write muszą mieć raczej metody, a nie pola. Przykład:

type
  TRectangle = class
  private
    FCoordinates: array[0..3] of Longint;
    function GetCoordinate(Index: Integer): Longint;
    procedure SetCoordinate(Index: Integer; Value: Longint);
  public
    property Left: Longint index 0 read GetCoordinate write SetCoordinate;
    property Top: Longint index 1 read GetCoordinate write SetCoordinate;
    property Right: Longint index 2 read GetCoordinate write SetCoordinate;

    property Bottom: Longint index 3 read GetCoordinate write SetCoordinate;
    property Coordinates[Index: Integer]: Longint read GetCoordinate write SetCoordinate;
    ...
  end;

Metoda dostępowa właściwości ze specyfikatorem indeksu musi pobierać dodatkową wartość parametru o typie Integer. Dla funkcji odczytu, musi to być ostatni parametr; dla procedury zapisu, musi to byc drugi od końca parametr (poprzedzający parametr specyfikujący wartość właściwości). Kiedy program realizuje dostęp do właściowści, jej stała całkowita jest automatycznie przekazywana do metody dostępowej.

Jeśli Rectangle jest obiektem klasy TRectangle, wtedy zapis:

Rectangle.Right := Rectangle.Left + 100;

odpowiada zapisowi:

Rectangle.SetCoordinate(2, Rectangle.GetCoordinate(0) + 100);