Само свойство AProperty описано как общедоступное по интерфейсу (public), т. е. внешне свойство выглядит в точности, как доступ к обычному полю, но за всяким обращением к свойству могут стоять нужные программисту действия. Например, если у нас есть объект, представляющий собой квадрат на экране, и мы его свойству "цвет" присваиваем значение "белый", то произойдет немедленная перерисовка, приводящая реальный цвет на экране в соответствие значению свойства.
В методах, входящих в состав свойств, может осуществляться проверка устанавливаемой величины на попадание в допустимый диапазон значений и вызов других процедур, зависящих от вносимых изменений. Если же потребности в специальных процедурах чтения и/или записи нет, то возможно вместо имен методов применять имена полей.
Рассмотрим следующую конструкцию:
type
TPropObject = class(TObject)
FValue: TSomeType;
procedure DoSomething;
procedure Correct(AValue: Integer);
procedure SetValue(NewValue: Integer);
procedure AValue: Integer read Fvalue
write SetValue;
end;
…
procedure TPropObject.SetValue(NewValue: Integer);
begin
if (NewValue <> FValue) and Correct (NewValue)
then
FValue:= NewValue; {Засылка значения в поле}
DoSomething;
end;
В этом примере чтение значения свойства AValue означает просто чтение поля FValue. Зато при присвоении ему значения внутри метода SetValue вызывается сразу два метода.
Если свойство должно только читаться или только записываться, то в его описании может присутствовать только соответствующий метод:
type
TAnObject = class(TObject)
property AProperty: TSomeType read GetValue;
end;
В этом примере вне объекта значение свойства можно лишь прочитать. Попытка присвоить значение Aproperty вызовет ошибку компиляции.
5. ОБЪЕКТЫ И ИХ ЖИЗНЕННЫЙ ЦИКЛ
Как создаются и уничтожаются объекты? В Object Pascal экземпляры объектов могут быть только
Память под конкретные объекты (динамические экземпляры классов) выделяется диспетчером памяти в периоде выполнения программы в особой
AMyObject:= TMyObject.Create; {действия с созданным объектом}
…
AMyObject.Destroy; {уничтожение объекта}
В Object Pascal конструкторов у класса может быть несколько. Общепринято называть конструктор Create. Типичное название деструктора — Destroy. Рекомендуется использовать для уничтожения экземпляра объекта метод Free, который первоначально проверяет указатель (не равен ли он
Для того чтобы правильно проинициализировать в создаваемом объекте поля, относящиеся к классу-предку, нужно сразу же при входе в конструктор вызвать конструктор предка:
constructor TmyObject.Create;
begin
inherited Create;
…
end;
Метод Create объекта MyObject типа TMyObject унаследован от класса предка TObject.
Взяв любой из примеров, поставляемых вместе с Delphi, мы обнаружим, что там почти нет вызовов конструкторов и деструкторов. Дело в том, что любой компонент, попавший при визуальном проектировании в приложение из Палитры компонентов, включается в определенную иерархию. Иерархия эта замыкается на форме (TForm): для всех ее составных частей конструкторы и деструкторы вызываются автоматически, незримо для программиста.
Вильям Л Саймон , Вильям Саймон , Наталья Владимировна Макеева , Нора Робертс , Юрий Викторович Щербатых
Зарубежная компьютерная, околокомпьютерная литература / ОС и Сети, интернет / Короткие любовные романы / Психология / Прочая справочная литература / Образование и наука / Книги по IT / Словари и Энциклопедии