Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Неясность с TCollection.Assign


Val ©   (2006-11-29 16:33:00) 

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


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

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


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

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


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

Этим.


Val   (2006-11-30 11:36:00) [4]

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


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


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


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


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

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


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


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


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

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


Val   (2006-11-30 10:59:00) [8]

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


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


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


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


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

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


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

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


Наверх

Титульная страница Поиск, карта сайта Написать письмо