Связывание свойств и полей Назад В начало Вперед

Для упрощения реализации свойств возможно связывание последних с полями и переменными интерфейса.

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.