Главная страница
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.044 c
5-1146937627
w!zard
2006-05-06 21:47
2007.01.21
Значение строки в listbox


2-1167252072
Wlad_M
2006-12-27 23:41
2007.01.21
Индикация занятости приложения


15-1167820074
VolJinn
2007-01-03 13:27
2007.01.21
Интересная задачка


15-1167137725
zdm
2006-12-26 15:55
2007.01.21
Русский Стандарт


15-1167486457
vrem
2006-12-30 16:47
2007.01.21
ПРАЗДНИК - что не нравится?