Вход


Главная страница >> Учебный процесс >> Конспекты >> Delphi. Библиотека визуальных компонентов VCL >> Структура справочника и соглашения >> Инкапсуляция. Свойства >> Определение свойств
Переход на главную страницу

Сервер поддерживается
кафедрой информатики и вычислительной техники ГрГУ
тел. +375-(0)152-445-101
E-mail :
kadan@grsu.grodno.by


[Назад]    [Содержание ]    [Вперед]

  


Определение свойств


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

type
══TAnObject = class(TObject)
══function GetAProperty: TSomeType;
══procedure SetAProperty(ANewValue: TSomeType);
══property AProperty: TSomeType
════read GetAProperty write SetAProperty;
end ;

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

AnObject.AProperty := AValue;
AVariable := AnObject.AProperty;

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

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

TPropObject = class(TObject)
══FValue: TSomeType;
══procedure DoSomething;
══procedure Correct(AValue: Integer);
══procedure SetValue(NewValue: Integer);
══property AValue: Integer read FValue write SetValue;
end;

procedure TPropObject.SetValue(NewValue: Integer;
begin
══if (NewValue<>FValue) and Correct(NewValue)
════then PValue := NewValue;
══DoSomething;
end;

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

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

type
══TAnObject = class(TObject)
════════════════property AProperty: TSomeType read GetValue;
══════════════end;

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

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

property Visible: boolean
══read FVisible write SetVisible default True;



[Назад]    [Содержание ]    [Вперед]

  


Для комментария : kadan@grsu.grodno.by

  
За содержание страницы отвечает Гончарова М.Н.
©
Кафедра СПиКБ, 2002-2017