На этом шаге мы рассмотрим свойство со спецификатором index.
Если посмотреть на синтаксис свойств, то можно заметить, что осталось нерассмотренным использование еще одного спецификатора. Это спецификатор index, который называется индексным спецификатором. Сразу отметим, что свойства с индексным спецификатором и свойства-массивы - это понятия разные. Такие свойства являются особым случаем свойств и могут использоваться для тех же целей, что и свойства-массивы, но выглядят иногда более привлекательно.
Приведем пример использования свойств с индексным спецификатором.
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Memo1: TMemo; procedure FormCreate(Sender: TObject); private { Private declarations } public { Public declarations } end; Masks = class private FMasks: array[1..3] of Word; function GetMask(Index: Integer): Word; procedure SetMask(Index: Integer; Value: Word); public property MaskForTask1: Word index 1 read GetMask write SetMask; property MaskForTask2: Word index 2 read GetMask write SetMask; property MaskForTask3: Word index 3 read GetMask write SetMask; end; var Form1: TForm1; MyMasks: TMasks; implementation {$R *.dfm} function TMasks.GetMask; begin Result := FMasks [Index] end; procedure TMasks.SetMask; begin FMasks[Index] := Value end; procedure TForm1.FormCreate(Sender: TObject); var St : String; i : Integer; begin MyMasks := TMasks.Create; Memo1.Lines.Clear; with MyMasks do begin MaskForTask1 := 10; MaskForTask2 := 5; MaskForTask3 := MaskForTaskl and MaskForTask2; { Последний оператор присваивания эквивалентен оператору } { SetMask (3, GetMask(l) and GetMask (2)); } { Вывод значений масок в поле Memol } St := 'MaskForTask1 = '+IntToStr(MaskForTask1); Memo1.Lines.Add(St); St := 'MaskForTask2 = '+IntToStr(MaskForTask2); Memo1.Lines.Add(St); St := 'MaskForTask3 = '+IntToStr(MaskForTask3); Memo1.Lines.Add(St); end; end; end.
Результат:
Рис.1. Результат работы приложения
Как видно из примера, несколько различных свойств, имеющих уникальные имена, используют одни и те же методы чтения и записи для доступа к разным элементам одного и того же поля-массива. Другими словами, происходит автонастройка методов доступа, в зависимости от того, какое свойство они обслуживают в данный момент.
Отметим некоторые ограничения, которые накладывает использование индексного спецификатора на форму описания свойства:
На следующем шаге мы рассмотрим видимость в классах.