Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как создать полную копию объекта? [D6, Win2k]


AndreiR ©   (2003-01-14 16:41:00) 

Есть указатель на объект некоторго класса. Класс мы не знаем (Но знаем, что он потомок некоторого базового класса). Нужно создать копию этого объекта.
Вся проблема в том, что не удается создать экземпляр этого класса, так как сам класс неизвестен. Метод Create у свойства ClassType (MyObject.ClassType.Create) не помогает. Похоже он вообще не вызывает никаких конструкторов.
Надеюсь проблема понятна.
Спасибо.


eheyler   (2003-01-14 17:34:00) [1]

Да, ещё:
под TBaseClass я подразумевал

TBaseClass = class of TBase;

где TBase - твой базовый класс


AndreiR   (2003-01-14 17:18:00) [2]

COOOOL!
Всем спасибо за помощь.
:-)


Skier   (2003-01-14 17:15:00) [3]

>AndreiR
Забыл 2 важные вещи
1) Конструктор - виртуальный
2) и для полной копии нужен Assign


eheyler   (2003-01-14 17:13:00) [4]

конструкция MyObject.ClassType.Create вызывает
конструктор класса TObject.

Если у базового класса конструктор виртуальный,
то приведение к нему даст возможность вызвать
нужный конструктор.

MyObject2 = TBaseClass(MyObject.ClassType).Create(...);

(а если нет - то надо сделать
его виртуальным, поскольку создание объекта через
ссылку на класс без виртуальных конструкторов особого смысла не имеет, за исключением вырожденных случаев)

И далее
MyObject2.Assign(MyObject);
// Предполагается, что TMyClass - потомок TPersistent
// и ты переписал виртуальный метод Assign


id_privin   (2003-01-14 17:05:00) [5]

NewInstance + Create + Assign = все получиться


Skier   (2003-01-14 17:03:00) [6]

>AndreiR
см.
1) TObject.ClassName
2) GetClass(...)
3) RegisterClass(es)


Наверх

Титульная страница Поиск, карта сайта Написать письмо