Форум: "Начинающим";
Текущий архив: 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]
> мне легче повозмущаться
чему именно тебе повозмущатся легче? что нет клонирования? а ты дай определение - что есть клонирование.
пример 1Type
TObject1=Class
Public
n1:Integer;
n2:Integer;
End;
тут все просто и понятно, взяли и присвоили поля
пример 2Type
TObject2=Class
Public
List:TObjectList; // содержащий экземпляры TObject1
End;
тут чего делаем при клонировании? копируем ссылку на экземпляр List или сам List тоже клонируем?
пример 3Type
TObject3=Class(TObject2)
Public
SubObjects2:TStringList; // строковые обозначения в Objects у которых объекты TObject1
End;
тут чего делаем при клонировании? что именно и как именно клонируем?
пример 4Type
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.045 c