Вход


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

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


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

  


Об иерархии компонентов


Классом-предком для всех компонентов является TComponent. Его место в иерархии компонентов VCL показано на рисунке.

В этом разделе мы рассмотрим ''корни" этой иерархии ? классы TPersistent и TComponent. "Крона" ? конкретные компоненты из Палитры компонентов будут рассмотрены в части 2 "Описание компонентов VCL".

Предком компонента служит TPersistent: в нем реализован виртуальный метод Assign ? основа для копирования объектов VCL:

procedure Assign(Source: TPersistent) ;

Этот метод производит копирование, помещая содержимое объекта Source в тот объект, который вызвал метод, то есть "в себя" (Self). Нужно иметь в виду, что выражение

Second := First;

есть совсем не то же самое, что Second.Assign(First) ;

В первом случае объект Second меняет значение; он становится указателем на объект First. (Напомним, что в Object Pascal объект представлен указателем).

Во втором случае Second остался тем же объектом, но его полям и свойствам присвоены те же значения, что и в объекте First. При попытке присвоить несовместимый объект возникает исключительная ситуация EConvertError.

Значение метода Assign не сводится к копированию двух объектов, совместимых в смысле правил присваивания языка. Переопределение этого метода дает возможность проводить очень нетривиальные присваивания. С использованием всех возможностей Assign в Delphi написаны графические объекты и буфер обмена (Clipboard). Например, поместить битовую картинку в буфер можно операцией

Clipboard.Assign(MyBitmap);

а извлечь ее оттуда:

MyBitmap.Assign(Clipboard);

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

Кроме того, переопределение Assign позволяет избежать ошибок при присвоении объектных типов, видимо, поэтому класс и был так назван (одно из значений persistent ? устойчивый)



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

  


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

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