Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.07.20;
Скачать: CL | DM;

Вниз

Как скопировать объект   Найти похожие ветки 

 
ciborg   (2008-06-19 15:08) [0]

Как полностью скопировать экземпляр объекта, а не только ссылку на него?


 
Тын-Дын ©   (2008-06-19 15:13) [1]

См. в Help TPersistent class


 
Palladin ©   (2008-06-19 15:13) [2]

применить оператор присвоения ко всем полям


 
Тын-Дын ©   (2008-06-19 15:31) [3]


> Palladin ©   (19.06.08 15:13) [2]
> применить оператор присвоения ко всем полям


Тимур, частные (private) поля  не удастся скопировать...


 
stas ©   (2008-06-19 15:37) [4]

ciborg   (19.06.08 15:08)  
сохранить в поток и прочитать из потока


 
ciborg   (2008-06-19 15:43) [5]


> Тын-Дын ©   (19.06.08 15:13) [1]
> См. в Help TPersistent class


Я так понял, что нужно сделать этот объект потомком от TPersistent. А что дальше?

вызываю команду
новый_объект.Assign(старый_объект);

Выдается ошибка.


 
Игорь Шевченко ©   (2008-06-19 15:51) [6]


> Я так понял, что нужно сделать этот объект потомком от TPersistent.
>  А что дальше?


а дальше переопределить метод Assign

Но собственно никто не мешает наследоваться от TObject и определить собственный метод Assign или SozdatCopy


 
ciborg   (2008-06-19 15:53) [7]


> а дальше переопределить метод Assign

Что, значит все равно поля придется самому копировать? Я думал все автоматически делается.


 
Ega23 ©   (2008-06-19 16:01) [8]


> Что, значит все равно поля придется самому копировать?


"Безусловно, Малыш!"  (с)


 
Ega23 ©   (2008-06-19 16:02) [9]


> Я думал все автоматически делается.


Ага, и "кампанент" TOSWindows2000 тоже есть...


 
stas ©   (2008-06-19 16:02) [10]

Var S:TMemoryStream;
begin
S:=TMemoryStream.Create;
S.WriteComponent(memo1);
memo1.Free;
S.Position:=0;
S.ReadComponent(Memo2);
end;
Тут копируется всё - координаты, размеры даже имена


 
DrPass ©   (2008-06-19 16:06) [11]


> Тут копируется всё - координаты, размеры даже имена

Только published-свойства


 
ciborg   (2008-06-19 16:11) [12]


> "Безусловно, Малыш!"  (с)


По моемому это недоработка ObjectPascal"я


 
stas ©   (2008-06-19 16:15) [13]

>DrPass ©   (19.06.08 16:06) [11]
не знал.


 
Ega23 ©   (2008-06-19 16:29) [14]


> По моемому это недоработка ObjectPascal"я


Пиши на Lisp, в чём проблема-то?


 
Palladin ©   (2008-06-19 16:37) [15]


> Тын-Дын ©   (19.06.08 15:31) [3]

приватные в общем случае нет конечно, аналог метода Assign свой писать нужно... я, обычно, если модель подразумевает клонирование объектов, создаю метод-функцию Clone... и конечно можно отнаследоваться от TPersistent, но иногда это стрельба из пушки по мухам :)...


 
ciborg   (2008-06-19 16:38) [16]


> Пиши на Lisp, в чём проблема-то?


Не... мне легче повозмущаться и продолжить писать на делфи.


 
Anatoly Podgoretsky ©   (2008-06-19 16:40) [17]

> ciborg  (19.06.2008 16:11:12)  [12]

Тебе нужен компилятор пятого поколения.


 
ciborg   (2008-06-19 16:41) [18]


> Тебе нужен компилятор пятого поколения.

Это что такое?


 
Palladin ©   (2008-06-19 16:44) [19]

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


 
Ega23 ©   (2008-06-19 16:57) [20]


> Это что такое?


Это когда ты только подумал, а у тебя уже кросс-платформенная система готова. С инсталлятором, многонациональной поддержкой и работает под любой СУБД. И даже комп включать не надо.


 
ciborg   (2008-06-19 17:06) [21]

Удалено модератором


 
Ega23 ©   (2008-06-19 17:14) [22]

Удалено модератором


 
ciborg   (2008-06-19 17:15) [23]

Удалено модератором


 
Palladin ©   (2008-06-19 18:52) [24]


> мне легче повозмущаться

чему именно тебе повозмущатся легче? что нет клонирования? а ты дай определение - что есть клонирование.

пример 1

Type
TObject1=Class
 Public
  n1:Integer;
  n2:Integer;
End;


тут все просто и понятно, взяли и присвоили поля

пример 2
Type
TObject2=Class
 Public
  List:TObjectList; // содержащий экземпляры TObject1
End;

тут чего делаем при клонировании? копируем ссылку на экземпляр List или сам List тоже клонируем?

пример 3
Type
TObject3=Class(TObject2)
 Public
  SubObjects2:TStringList; // строковые обозначения в Objects у которых объекты TObject1
End;

тут чего делаем при клонировании? что именно и как именно клонируем?

пример 4
Type
 TObject4=Class(TObject3)
  Private
    m_theParent:TObject4;
  Public
   Constructor Create(p_theParent:TObject4);
   Property Parent:TObject4 Read m_theParent;
End;

а тут чего делаем при клонировании? что именно и как именно клонируем?

каким попом разработчики компилятора должны закладывать возможность клонирования?

повозмущаться он решил...


 
ciborg   (2008-06-19 19:04) [25]


> чему именно тебе повозмущатся легче? что нет клонирования?
>  а ты дай определение - что есть клонирование.


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


 
Palladin ©   (2008-06-19 19:06) [26]


> ciborg   (19.06.08 19:04) [25]

это называется копирование ссылки, а не клонирование


 
Игорь Шевченко ©   (2008-06-19 19:52) [27]


> чему именно тебе повозмущатся легче? что нет клонирования?
>  а ты дай определение - что есть клонирование.


а ты .Net почитай - их там аж два, копирования, deep и не deep :)


 
Palladin ©   (2008-06-19 19:55) [28]


> Игорь Шевченко ©   (19.06.08 19:52) [27]

читал, но не проникся :)



Страницы: 1 вся ветка

Текущий архив: 2008.07.20;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.025 c
1-1195468999
Sour Smile
2007-11-19 13:43
2008.07.20
Безопасный режим


15-1211909818
best-serg
2008-05-27 21:36
2008.07.20
Таблица Paradox и установка программы на новый пк


1-1195408460
ice-hammer
2007-11-18 20:54
2008.07.20
Как перетащить круг в Canvas е


15-1212729969
PHoeNiX
2008-06-06 09:26
2008.07.20
описание процедур


2-1214202572
ciborg
2008-06-23 10:29
2008.07.20
Билд проекта