|
||||||||
|
Об иерархии компонентов
Классом-предком для всех компонентов является TComponent. Его место в иерархии компонентов VCL показано на рисунке. В этом разделе мы рассмотрим ''корни" этой иерархии ? классы TPersistent и TComponent. "Крона" ? конкретные компоненты из Палитры компонентов будут рассмотрены в части 2 "Описание компонентов VCL". Предком компонента служит TPersistent: в нем реализован виртуальный метод Assign ? основа для копирования объектов VCL:
Этот метод производит копирование, помещая содержимое объекта Source в тот объект, который вызвал метод, то есть "в себя" (Self). Нужно иметь в виду, что выражение Second := First; есть совсем не то же самое, что Second.Assign(First) ; В первом случае объект Second меняет значение; он становится указателем на объект First. (Напомним, что в Object Pascal объект представлен указателем). Во втором случае Second остался тем же объектом, но его полям и свойствам присвоены те же значения, что и в объекте First. При попытке присвоить несовместимый объект возникает исключительная ситуация EConvertError. Значение метода Assign не сводится к копированию двух объектов, совместимых в смысле правил присваивания языка. Переопределение этого метода дает возможность проводить очень нетривиальные присваивания. С использованием всех возможностей Assign в Delphi написаны графические объекты и буфер обмена (Clipboard). Например, поместить битовую картинку в буфер можно операцией
а извлечь ее оттуда:
Нужно ли пояснять, что два эти класса находятся в разных местах иерархии и несовместимы по присваиванию? Но то, что у них есть общего, присваивается посредством Assign. Кроме того, переопределение Assign позволяет избежать ошибок при присвоении объектных типов, видимо, поэтому класс и был так назван (одно из значений persistent ? устойчивый)
Для комментария : kadan@grsu.grodno.by | |||||||||||
За содержание страницы отвечает Гончарова М.Н. © Кафедра СПиКБ, 2002-2017 |