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

Вниз

Неясность с TCollection.Assign   Найти похожие ветки 

 
Val ©   (2006-11-29 16:33) [0]

Есть class1, имеющий свойство-коллекцию (prop), наследник TCollection(TIdCookies->TOwnedCollection->TCollection).
Есть class2, имеющий свойство того же типа.
Выполняю
class2_obj.prop.Assign(class1_obj.prop);
(перекрытых Assign нет, выполняется TCollection.Assign)
затем сравниваю значения prop.Items[i].xxx - есть различия в одном из свойств - в class2_obj оно пустое...почему? ведь при assign должна получаться _копия_ объекта, разве не так?


 
Юрий Зотов ©   (2006-11-29 18:32) [1]

Если в классе элементов коллекции перекрыт метод Assingn(To) - то да, будет копия. А если не перекрыт, то кто же будет делать эту копию?


 
Val ©   (2006-11-30 10:50) [2]

Наврал я конечно :( в классе элемента коллекции метод Assign перекрыт.
Но факт остается фактом - по крайней мере, одно из свойств одного из трех элементов коллекции отличается после выполнения Assign. Как я понимаю, возможно, дело в Set методе соотв. свойства, который срабатывает при присвоению свойству значения(у элемента коллекции есть взаимозависимые свойства, например Max_Age и Expires). Но как скопировать коллекцию один к одному, чтобы эти методы не срабатывали?


 
Сергей М. ©   (2006-11-30 10:56) [3]


> в классе элемента коллекции метод Assign перекрыт.


А следовало бы перекрыть именно AssignTo.
Перекрывать без явной надобности публичные методы в общем случае не есть корошо, даже если они объявлены виртуальными.


 
Val ©   (2006-11-30 10:59) [4]

>[3] Сергей М. ©   (30.11.06 10:56)
ну, это к писателям инди.


 
Сергей М. ©   (2006-11-30 11:03) [5]


> это к писателям инди


Ну ведь есть же исходники этого "чуда"..

оттрассируй пошагово интересующую логику - наверняка станет понятно, баг это или фича ..


 
Val ©   (2006-11-30 11:09) [6]

да есть конечно. но дело в том, что мне не нужно это, будь это баг или фича. мне нужна полная точная копия коллекции в другом объекте(а просто хочу закэшировать куки). может это вообще не assign делается?


 
Сергей М. ©   (2006-11-30 11:15) [7]


> мне нужна полная точная копия коллекции в другом объекте


Вот и оттрассируй Assign() .. либо он это делает, либо не делает по неважным для тебя причинам ..


 
Val ©   (2006-11-30 11:36) [8]

>Сергей М. ©   (30.11.06 11:15)
ну..если бы он это делал, то ветки бы не было. в возможности оттрасировать вопроса нет. вопрос - верно ли я делаю в принципе - копирование объекта делается _стандартно_ именно этим методом?


 
Юрий Зотов ©   (2006-11-30 11:53) [9]

Этим.


 
Юрий Зотов ©   (2006-11-30 11:55) [10]

Еще надо посмотреть, что делает Assign в элементе коллекции. Возможно, он копирует не все свойства.


 
Val ©   (2006-11-30 12:56) [11]

всем большое спасибо, буду разбираться.



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

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

Наверх




Память: 0.49 MB
Время: 0.032 c
4-1157609393
lu0
2006-09-07 10:09
2007.01.21
внедрение Dll и Open/SaveDialog


2-1167378834
Footballer
2006-12-29 10:53
2007.01.21
TFileStream


2-1167356401
Digest
2006-12-29 04:40
2007.01.21
Из-за чего может выскакивать ошибка?


2-1167826182
pound
2007-01-03 15:09
2007.01.21
нестандартная кнопка


11-1144316016
BaryVetaL
2006-04-06 13:33
2007.01.21
В догонку к BVLedNumber...