Форум: "Основная";
Текущий архив: 2007.01.21;
Скачать: [xml.tar.bz2];
Вниз
Неясность с 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;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.039 c