Связывание свойств и полей |
Для упрощения реализации свойств возможно связывание последних с полями и переменными интерфейса.
property <имя_свойства> : <тип_свойства> absolute <поле> [ read ] [ write ];
<имя_свойства> - произвольный уникальный идентификатор Атлантиса.
<тип_свойства> - любой легальный тип Атлантиса. Массивы не поддерживаются.
<поле> - поле логической таблицы или переменная, связываемая со свойством.
Как и в общем случае read и write определяют тип доступа к свойству.
Пример.
objInterface example; forward; type myRec = record f1 : integer; f2 : string; po : example; end; objInterface example; property p1 : integer read; property p2 : string write; property p3 : myRec read write; property s : string; // тоже что и read write end; vipInterface vExample implements example; interface vExample; var r : myRec; t : integer; function GetP1 : integer; { GetP1 := t; } procedure SetP2 ( str : string ); { t := t + 1; // счётчик обращений Message (str); } property p1 : integer read GetP1; property p2 : string write SetP2 ('Info: ' + p2); property p3 : myRec read r write r := result; property s : string absolute r.f2; // по-умолчанию read и write property pt : integer read t; // внутреннее свойство end. Interface iClient; var di : vExample; r : myRec; handleEvent cmInit : { r.f2 := 'Пример'; di.p3 := r; di.s := 'Модифицированный пример'; di.p2 := di.p3.f2; Message ( String (di.p1) ); // di.p3.f1 := 0; // Ошибка: Нельзя изменять значение // полей свойства-структуры. abort; } end; end.
Версия : Атлантис 5.0.