![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
помогите сделать временную копию объекта
newid © (2005-01-30 23:14:00)может, вопрос совсем несерьезный, но не получается что-то...
нужно создать временную копию объекта ("резервную копию", из которой можно будет восстановить состояние исходного объекта при необходимости), при этом объект может быть экземпляром одного из нескольких наследников общего дедушки, т.е. точно класс объекта не знаем.
такое:
obj2 := obj1;
try
DoSome(obj1);
except
obj1 := obj2;
end;
само собой не катит, потому что с сылками работаем.
как вообще оперировать объектами в Object Pascal?
хм (2005-01-31 02:19:00) [21]можно использовать CopyMemory, если в объекте нет указателей. Т.е, нужно много думать.
Но лучше не надо.(делать, а не думать :)
Юрий Зотов (2005-01-31 01:49:00) [22]> как вообще оперировать объектами в Object Pascal?
Хороший вопрос. Но не знаю, как ответить. Писать книгу в online почему-то не готов.
jack128 (2005-01-31 00:00:00) [23]newid (30.01.05 23:43) [2]
дает такую ошибку:
---------------------------
map
---------------------------
Cannot assign a TSomeObject to a TSomeObject.
потому что этот метод нужно реализововать самому.
newid (2005-01-30 23:43:00) [24]
> [1] P.N.P.
ну... это если объекты -- экземпляры класса-наследника TPersistent.
и, кстати, у меня почему-то первая операция:
Obj2.Assign(Obj1);
дает такую ошибку:
---------------------------
map
---------------------------
Cannot assign a TSomeObject to a TSomeObject.
---------------------------
OK
---------------------------
вот мой код:
var
o1: TSomeObject;
o2: TSomeObject;
begin
o1 := TSomeObject.Create;
o2 := TSomeObject.Create;
o1.StringProp := 'test1';
ShowMessage(o1.StringProp);
o2.Assign(o1); //Cannot assign a TSomeObject to a TSomeObject.
o1.StringProp := 'test2';
ShowMessage(o1.StringProp);
o1.Assign(o2);
ShowMessage(o1.StringProp); //по задумке должно показать 'test1'
o1.Free;
o2.Free;
end;
P.N.P. (2005-01-30 23:18:00) [25]Obj2.Assign(Obj1);
...
Obj1.Assign(Obj2);