Ключевое слово _property служит для объявления свойств и спецификации их атрибутов. Синтаксис:
property тип свойства имя = { список атрибутов свойства };
Спецификации атрибутов имеют вид атрибут [= значение] и отделяются друг от друга запятыми. Возможны следующие атрибуты:
read = поле \ get-функция
write = поле \ set-функция
stored = true | false | поле get-функция
index = целая константа
default = значение
nodefault
Для атрибутов read/write может указываться либо ассоциированное со свойством поле (тогда говорят о прямом доступе к свойству), либо имя метода доступа. Если спецификатор write опущен, то свойство можно только читать. Можно, конечно, объявить и свойство только для записи, но трудно придумать случай, когда это имело бы смысл.
Обычным является объявление прямого доступа для чтения и set-функции — для записи:
_property bool Started = {read=FStarted, write=SetStarted};
Атрибут index специфицирует целое число, которое должно передаваться в качестве единственного аргумента get-функции (обычно последняя параметров не имеет) и первого аргумента set-функции (которая обычно имеет один параметр — значение для свойства):
private:
int FCoords [4];
int _fastcall GetCoords(int Index) {
return FCoords[Index];
void _fastcall SetCoords (int Index, int value) FCoords[Index] = value;
}
public:
_property int Left = {read=GetCoords,
write=SetCoords, index=0};
_property int Top = (read=GetCoords,
write=SetCoords, index=l);
_property int Right = (read=GetCoords,
write=SetCoords, index=2} ;
_property int Bottom = {read=GetCoords,
write=SetCoords, index=3};
Атрибуты stored, default и nodefault yназываются спецификаторами хранения
Они не влияют на поведение программы и специфицируются обычно только для опубликованных свойств. В частности, они определяют. будет ли значение свойства сохраняться в файле формы. Если атрибут stored равен true и значение свойства отлично от указанного в атрибуте default, значение свойства сохраняется, в противном случае — нет. Если спецификатор stored опущен, для него принимается значение true.