Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> deep copy, поясните пожалуста 
:(
    Опции темы
redrick
Дата 17.10.2005, 15:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 547
Регистрация: 7.1.2004
Где: Москва

Репутация: нет
Всего: 5



Тема избитая, сам знаю, но все таки :

если у меня есть сложный объект с кучей полей, среди которых попадаются коллекции из объектов опять же с кучей полей и т.д. - какой есть способ создать его deep copy ?
Serialization ?
имплементировать для всех используемых классов clone() ?

или в корне не верный подход ?
(у меня есть объект обисывающий состояние системы - мне нужно отработать различные сценарии развития и потом сравнить результаты)

спасибо


--------------------
Имею Мнение Хрен Оспоришь   
PM MAIL ICQ   Вверх
Exception
Дата 17.10.2005, 15:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 4525
Регистрация: 26.12.2004

Репутация: 29
Всего: 186



Цитата(redrick @ 17.10.2005, 16:51)
создать его deep copy

как сей термин на русском звучит?
это то есть "полное копирование", противоположность "shallowed copy"?
ыыы...
а зачем тебе его надо реализовать? конкретнее...
с помощью рефлексии нельзя перебирать все члены и копировать?
PM   Вверх
redrick
Дата 17.10.2005, 20:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 547
Регистрация: 7.1.2004
Где: Москва

Репутация: нет
Всего: 5



Run-time error
ну я говорю - есть объект типа SystemState
у него до кучи разных полей которые в процессе работы системы меняются.
Вот я и хочу запустить систему в одном варианте - посмотреть что да как, затем в другом - и сравнить результаты, т.е. содержимое SystemState которые получаются в одном и в другом случае

Цитата
это то есть "полное копирование", противоположность "shallowed copy"?

оно самое


--------------------
Имею Мнение Хрен Оспоришь   
PM MAIL ICQ   Вверх
-ser-
Дата 18.10.2005, 03:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 344
Регистрация: 1.2.2005

Репутация: 5
Всего: 13



THE ULTIMATE IN COPYING/CLONING OBJECTS!!!!

Create yourself a nice abstract base class, which includes the ICLONABLE interface. Then include this code below in your base class. Derive all of your domain objects from there. You could even try a nice abstract base collection class and also include this code below. Be creative, but always use this code on your base classes. Don't forget to make them SERIALIZABLE. This will clone datatables, arrays, custom collections, simple properties, hashtables... whatever you want. Why add code to all of your classes when this will do it all!

Код

  public object Clone(bool doDeepCopy)
  {
   if (doDeepCopy)
   {
    BinaryFormatter BF = new BinaryFormatter();
    MemoryStream memStream = new MemoryStream();
    BF.Serialize(memStream, this);
    memStream.Flush();
    memStream.Position = 0;
    return (BF.Deserialize(memStream));
   }
   else
   {
    return (this.MemberwiseClone());
   }
  }
  
  public object Clone()
  {
   return (Clone(false));
  }



можешь еще здесь посмотреть
http://www.codeproject.com/csharp/cloneimpl_class.asp





--------------------
"Тонкая, однако, работа." 
PM MAIL ICQ   Вверх
redrick
Дата 18.10.2005, 11:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 547
Регистрация: 7.1.2004
Где: Москва

Репутация: нет
Всего: 5



вобщем понятно - всем спасибо - сериализация и точка.


--------------------
Имею Мнение Хрен Оспоришь   
PM MAIL ICQ   Вверх
mr.DUDA
Дата 20.10.2005, 22:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 110
Всего: 232



Да в принципе можно реализовать свой способ размножения сколь угодно сложных объектов... Как я люблю повторять: тут всё дело в фантазии разработчика smile


--------------------
user posted image
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0491 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.