Так как свойство обеспечивает обмен данными с внешней средой, то для доступа к его значению используются специальные методы класса. Поэтому обычно свойство определяется тремя элементами: полем и двумя методами, которые осуществляют его чтение/запись:

type

TAnCbject = class(TObject)

function GetColor: TSomeType;
procedure SetColor (ANewValue: TSomeType);
property AColor: TScmeType read GetColor write SetColor;
end;

В данном примере доступ к значению свойства AColor осуществляется через вызовы методов GetColor и SetColor. Однако в обращении к этим методам в явном виде нет необходимости: достаточно написать:

AnObj ect. AColor : = AValue ;
AVariable := AnObject.AColor;

и компилятор самостоятельно оттранслирует обращение к свойству AColor в вызовы методов Getcolor или Setcolor. То есть внешне свойство выглядит в точности как обычное поле, но за всяким обращением к нему могут стоять нужные вам действия. Например, если у вас есть объект, представляющий собой квадрат на экране, и его свойству "цвет" вы присваиваете значение "белый", то произойдет немедленная перерисовка, приводящая реальный цвет на экране в соответствие со значением свойства. Выполнение этой операции осуществляется методом, который связан с установкой значения свойства "цвет".

В методах, входящих в состав свойств, может осуществляться проверка устанавливаемой величины на попадание в допустимый диапазон значений и вызов других процедур, зависящих от вносимых изменений. Если же потребности в специальных процедурах чтения и/или записи нет, можно вместо имен методов применять имена полей. Рассмотрим следующую конструкцию:

TPrcpObject = class(TObject) FValue: TScmelype ;
procedure toScrrething;
function Correct (AValue: Integer) :boolean;
procedure SetValue(NewValue: Integer);
property AValue: Integer read FValue write SetValue;
end;
procedure TPropObject.SetValue(NewValue: Integer);
begin
if (NewValueOFValue) and Correct (NewValue) then FValue := NewValue;
toSarething;
end;

В этом примере чтение значения свойства AValue означает просто чтение поля F/alue. Зато при присвоении значения внутри SetValue вызывается сразу два метода.

Если свойство должно только читаться или записываться, в его описании может присутствовать соответствующий метод:

type

TAnObject = class (TObject)

property APrcperty: TScmeType read GetValue;
end;

В этом примере вне объекта значение свойства можно лишь прочитать; попытка присвоить свойству АРгорепу значение вызовет ошибку компиляции.

Для присвоения свойству значения по умолчанию используется ключевое

ОЮВО default:

property Visible: boolean read FVisible write SetVisible default True;

Это означает, что при запуске программы свойство будет установлено компилятором В True.

Свойство может быть и векторным; в этом случае оно внешне выглядит как массив:

property APoints [Index : Integer] :TPoint read GetPoint write SetPoint;

На самом деле в классе может и не быть соответствующего поля - массива. Напомним, что вся обработка обращений к внутренним структурам класса может быть замаскирована.


⇐ Предыдущая страница| |Следующая страница ⇒

Программирование в Delphi 7



Новости за месяц

  • Октябрь
    2017
  • Пн
  • Вт
  • Ср
  • Чт
  • Пт
  • Сб
  • Вс