Форма входа
I Love Bashorg
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Форум » Программирование » Delphi » Класс TPersistent (Библиотека визуальных компонентов VCL и ее базовые классы)
Класс TPersistent
BombersДата: Суббота, 10.04.2010, 23:55 | Сообщение # 1
Лейтенант
Группа: Администраторы
Сообщений: 62
Репутация: 0
Статус: Offline
Класс TPersistent

"Persistent" в переводе с английского означает "устойчивый", "постоянный". Что же такого постоянного в одноименном классе? Ответ таков: виртуальный метод

procedure Assign(Source: TPersistent);

Этот важнейший метод осуществляет копирование содержимого одного объекта (source) в другой (self, т. е. в объект, вызвавший метод Assign). При этом объект-получатель остается самим собой, чего нельзя достигнуть, используя простое присваивание переменных объектного типа:

FirstObject := SecondObject;

Ведь в этом случае указатель на одну область адресного пространства, содержащую экземпляр класса (объект), замещается указателем на другую область адресного пространства, содержащую другой объект.

Метод Assign позволяет продублировать объект — присвоить одному объекту значения всех свойств другого. При этом объекты не обязательно должны быть одного и того же класса; более того, они не обязательно должны находиться в отношениях "родитель-потомок". Данный метод тем и хорош, что позволяет полиморфное присвоение. Конструкция

Clipboard.Assign(Picture);

позволяет скопировать содержимое картинки Picture в папку обмена Windows (объект clipboard). Какова здесь логика? Известно, что в папку обмена можно поместить растровую картинку, текст, метафайл, мультимедийные данные и т. п. Метод Assign класса TClipboard переписан таким образом, чтобы обеспечить присвоение (т. е. реальное перемещение в папку обмена) всех этих данных.

procedure TCiipboard.Assign(Source: TPersistent);

begin

if Source is TPicture

then AssignPicture(TPicture(Source))

else

if Source is TGraphic

then AssignGraphic(TGraphic(Source))

else inherited Assign(Source);

end;

Для обеспечения взаимодействия потомков класса TPersistent со средой разработки предназначен метод

function GetNamePath: string; dynamic;

Он возвращает имя объекта для передачи его в Инспектор объектов.

Для взаимодействия с потоками при загрузке и сохранении компонентов предназначен следующий метод:

procedure DefineProperties(Filer: TFiler); virtual;

Класс TPersistent никогда не используется напрямую, от него порождаются потомки, которые должны уметь передавать другим объектам значения своих свойств, но не являться при этом компонентами.

 
Форум » Программирование » Delphi » Класс TPersistent (Библиотека визуальных компонентов VCL и ее базовые классы)
  • Страница 1 из 1
  • 1
Поиск:

Воскресенье, 05.05.2024, 02:33
Приветствую Вас Гость
Статистика
  • Admin icq status
    587643917
    Друзья сайта