Форум: "Основная";
Текущий архив: 2003.01.23;
Скачать: [xml.tar.bz2];
ВнизКак создать полную копию объекта? Найти похожие ветки
← →
AndreiR (2003-01-14 16:41) [0]Есть указатель на объект некоторго класса. Класс мы не знаем (Но знаем, что он потомок некоторого базового класса). Нужно создать копию этого объекта.
Вся проблема в том, что не удается создать экземпляр этого класса, так как сам класс неизвестен. Метод Create у свойства ClassType (MyObject.ClassType.Create) не помогает. Похоже он вообще не вызывает никаких конструкторов.
Надеюсь проблема понятна.
Спасибо.
← →
Skier (2003-01-14 17:03) [1]>AndreiR
см.
1) TObject.ClassName
2) GetClass(...)
3) RegisterClass(es)
← →
id_privin (2003-01-14 17:05) [2]NewInstance + Create + Assign = все получиться
← →
eheyler (2003-01-14 17:13) [3]конструкция MyObject.ClassType.Create вызывает
конструктор класса TObject.
Если у базового класса конструктор виртуальный,
то приведение к нему даст возможность вызвать
нужный конструктор.
MyObject2 = TBaseClass(MyObject.ClassType).Create(...);
(а если нет - то надо сделать
его виртуальным, поскольку создание объекта через
ссылку на класс без виртуальных конструкторов особого смысла не имеет, за исключением вырожденных случаев)
И далее
MyObject2.Assign(MyObject);
// Предполагается, что TMyClass - потомок TPersistent
// и ты переписал виртуальный метод Assign
← →
Skier (2003-01-14 17:15) [4]>AndreiR
Забыл 2 важные вещи
1) Конструктор - виртуальный
2) и для полной копии нужен Assign
← →
AndreiR (2003-01-14 17:18) [5]COOOOL!
Всем спасибо за помощь.
:-)
← →
eheyler (2003-01-14 17:34) [6]Да, ещё:
под TBaseClass я подразумевал
TBaseClass = class of TBase;
где TBase - твой базовый класс
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2003.01.23;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.007 c