|
140 / 133 / 88
Регистрация: 18.05.2013
Сообщений: 399
|
|||||||||||||||||||||
Создание полной копии (deep copy) объекта07.02.2016, 12:15. Показов 5440. Ответов 13
Метки нет (Все метки)
Всем привет,
понадобилось в проекте создать полную копию объекта, для чего воспользовался двоичной сериализацией:
Подскажите, пожалуйста, почему так происходит и что я сделал не так? Если не создавать полной копии и просто скопировать все поля класса DateAndTime в конструкторе, то все работает, как и ожидалось.
0
|
|||||||||||||||||||||
| 07.02.2016, 12:15 | |
|
Ответы с готовыми решениями:
13
Создание полной копии объекта с рефлексией
Добавление копии объекта в массив |
|
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
|
||
| 07.02.2016, 12:41 | ||
Сообщение было отмечено atoi как решение
РешениеВо второй форме вы объект клонируете и присваиваете полю ссылку на уже другой объект. Но это никак не меняет переданную в конструктор переменную, которая по-прежнему ссылается на старый, не клонированный объект. Вам надо ссылку на новый объект во второй форме сделать открытой и в первой форме отслеживать закрытие второй, после чего самостоятельно доставать оттуда ссылку на новый объект и присваивать ее переменной. Ну или создайте класс-обертку, который будет содержать ссылку на DateAndTime и передавайте во вторую форму ссылку на экземпляр этой обертки. В ней же и меняйте значение переменной на ссылку на клонированный объект.
1
|
||
|
140 / 133 / 88
Регистрация: 18.05.2013
Сообщений: 399
|
|||||||||||||||||
| 07.02.2016, 13:15 [ТС] | |||||||||||||||||
Добавлено через 16 минут Кстати, в обрабтчике события btnSave код должен быть такой:
0
|
|||||||||||||||||
|
4694 / 2702 / 734
Регистрация: 02.08.2011
Сообщений: 7,228
|
|||||||
| 07.02.2016, 13:37 | |||||||
Сообщение было отмечено atoi как решение
РешениеПосле этой строки: parentObj = newObj; на новый объект будет указывать переданная копия ссылки, а не исходная.Можно сделать вот так:
1
|
|||||||
|
140 / 133 / 88
Регистрация: 18.05.2013
Сообщений: 399
|
|
| 07.02.2016, 13:48 [ТС] | |
|
IamRain, спасибо большое за доходчивое объяснение! Я, по своей глупости, думал, что при передаче переменных ссылочного типа передается ссылка, а не копия, на что указал уважаемый kolorotur.
0
|
|
|
|
|
| 07.02.2016, 13:51 | |
|
0
|
|
|
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
|
|||
| 07.02.2016, 13:58 | |||
|
В качестве аналогии можете взять файловую систему: есть файл, содержащий данные — это объект. Есть ярлык на файл — это переменная, а значение переменной — путь к файлу. Вы берете ярлык, лежащий на рабочем столе (в первой форме), копируете его и вставляете в другую папку (передаете в конструктор второй формы). Теперь у вас два ярлыка, ссылающиеся на один и тот же файл. В другой папке вы меняете путь скопированного ярлыка на другой файл. Поменяется ли от этого путь к файлу в ярлыке, лежащем на рабочем столе? Нет, потому что вы изменяете копию ярлыка (копию переменной). В результате у вас два ярлыка (две переменные), ссылающиеся на два разных файла (два объекта).
1
|
|||
|
140 / 133 / 88
Регистрация: 18.05.2013
Сообщений: 399
|
||
| 07.02.2016, 14:28 [ТС] | ||
|
Добавлено через 18 минут IamRain, проверил ваш пример, он не работает, похоже, потому что во второй форме определена переменная parentObj, содержащая ссылку на переменную, переданную в конструктор второй формы
0
|
||
|
4694 / 2702 / 734
Регистрация: 02.08.2011
Сообщений: 7,228
|
||||||
| 07.02.2016, 16:03 | ||||||
|
хм, странно, не могу понять почему после возрата из диалога Debug.WriteLine в строке 17 выдает true - это ведь должны быть ссылки уже на разные объекты. Может кто объяснить?
0
|
||||||
|
|
||
| 07.02.2016, 16:18 | ||
|
Нужен один объект по всей программе? Так создать класс-синглет и хранить его там, менять где угодно, и везде он будет одним и тем же... В чем проблема-то?
0
|
||
|
4694 / 2702 / 734
Регистрация: 02.08.2011
Сообщений: 7,228
|
|
| 07.02.2016, 16:41 | |
|
Insite2012, вы можете дать аргументированный ответ на вопрос?
0
|
|
|
|
||
| 07.02.2016, 16:44 | ||
|
Кидайте проект, я присоединюсь к вашему исследованию.
0
|
||
|
|
|||||||
| 07.02.2016, 16:50 | |||||||
1
|
|||||||
| 07.02.2016, 16:51 | |
|
Не по теме: Я уже далеко от ПК - с телефона пишу.
0
|
|
| 07.02.2016, 16:51 | |
|
Помогаю со студенческими работами здесь
14
Создание полной копии сервера Deep copy and Shadow copy Создание копии объекта используя объявление через указатель Вместо полной копии страницы выдает только часть кода (cURL) При запуске макроса с автофигуры с удалением этой же автофигуры с копии - ошибка ActiveSheet.Copy Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Символьное дифференцирование
igorrr37 13.02.2026
/ *
Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2).
Унарный минус обозначается как !
*/
#include <iostream>
#include <stack>
#include <cctype>. . .
|
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
|
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу,
и светлой Луне.
В мире
покоя нет
и люди
не могут жить в тишине.
А жить им немного лет.
|
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила»
«Время-Деньги»
«Деньги -Пуля»
|
|
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога
Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога
Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
|
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
|