6.6.3 Массив свойств

Вверх  Предыдущий  Следующий

Можно также использовать и массив свойств. Это свойства, которые имеют индекс, так же, как его имеет массив. Индекс может быть одномерным или многомерным. В отличии от массива (статического или динамического), индекс массива свойств может быть не только порядкового типа, но но и любого другого типа.

Read specifier (спецификатор чтения) для массива свойств является методом (функцией), которая имеет тотже тип возвращаемого значения, что и тип элемента свойства. Функция должна иметь в качестве единственного параметра переменную одного и того же типа, что и тип индекса. Для массива свойств, нельзя указать поле котрое бы использовал read specifier.

Write specifier (спецификатор записи) для массива свойств является метод (процедур), которая имеет два аргумента: первый аргумент имеет тот же тип, что и индекс, а второй аргумент является параметром того же типа, что и тип элемента свойства.

В качестве примера, смотри следующее объявление:

Type

TIntList = Class

Private

  Function GetInt (I : Longint) : longint;

  Function GetAsString (A : String) : String;

  Procedure SetInt (I : Longint; Value : Longint;);

  Procedure SetAsString (A : String; Value : String);

Public

  Property Items [i : Longint] : Longint Read GetInt Write SetInt;

  Property StrItems [S : String] : String Read GetAsString Write SetAsstring;

end;

 

Var

AIntList : TIntList;

Тогда следующие операции будут справедливы:

AIntList.Items[26] := 1;

AIntList.StrItems['twenty-five'] := 'zero';

WriteLn ('Item 26 : ',AIntList.Items[26]);

WriteLn ('Item 25 : ',AIntList.StrItems['twenty-five']);

В то время как эти операции будет генерировать ошибку:

AIntList.Items['twenty-five'] := 1;

AIntList.StrItems[26] := 'zero';

Поскольку типы индексов неверны.

Массив свойств может быть многомерный:

Type

TGrid = Class

Private

  Function GetCell (I,J : Longint) : String;

  Procedure SetCell (I,J : Longint; Value : String);

Public

  Property Cellcs [Row,Col : Longint] : String Read GetCell Write SetCell;

end;

Если есть размер N, то типы первых N аргументов методов Get и Set должны соответствовать типам индексов спецификаторов N в определении массива свойств.