Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2008.07.20;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.51 MB
Время: 0.042 c
15-1212432475
@!!ex
2008-06-02 22:47
2008.07.20
Нужен хост под SVN.


2-1213678891
Knight
2008-06-17 09:01
2008.07.20
Хранимая процедура


2-1213892206
lewka-serdceed
2008-06-19 20:16
2008.07.20
Поиск символа в StringGrid


15-1212671141
Vlad Oshin
2008-06-05 17:05
2008.07.20
Скоро прокси починится. Извините


15-1212666482
ЧуВАГ
2008-06-05 15:48
2008.07.20
Delphi uses





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский