Форум программистов, компьютерный форум, киберфорум
Наши страницы

C# .NET

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 5.00
Escapable
54 / 54 / 1
Регистрация: 09.11.2010
Сообщений: 120
#1

ICloneable, Copy-constructor и Serialization\Deserialization: Какой из данных методов вы считаете предпочтительным - C#

16.03.2012, 23:53. Просмотров 1150. Ответов 3
Метки нет (Все метки)

Какой из данных методов вы считаете предпочтительным (и почему), если дело касается глубокой копии (deep copy) объекта? Правду ли говорят, что лучше воздерживаться от реализации интерфейса ICloneable?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.03.2012, 23:53
Здравствуйте! Я подобрал для вас темы с ответами на вопрос ICloneable, Copy-constructor и Serialization\Deserialization: Какой из данных методов вы считаете предпочтительным (C#):

XML serialization & XML deserialization - C#
Проблема в том, что я по-видимому не понимаю, как сериализовать данные из текстбоксов через класс/структуру в xml файл. При попытке...

Реализовать ввод исходных данных, расчет и вывод данных в виде методов класса. В Main только создание объектов и вызов методов - C#
Всем привет) помогите пожалуйста с заданием "Реализовать ввод исходных данных, расчет и вывод данных в виде методов класса. В Main только...

boost::copy для создания copy constructor and assignment operator - Boost C++
<boost/iostreams/copy.hpp> кто ниб использовал boost::copy для создания copy constructor and assignment operator поделитесь опытом...

this и Copy-Constructor - C++
Скажите пожалуйста почему даный еод вызывает RTE(Run Time Error) Добавлено через 1 минуту Engine engg(*this); Где this...

Copy constructor - C++
#include "stdafx.h" #include <iostream> using namespace::std; class alpha{ int data; public: alpha() {} alpha(int d) :...

Default copy constructor - C++
Что default copy constructor делает, из-за чего мой NRVO выводит разные адресса, если оставить его по умолчанию. А если переопределить...

3
kolorotur
Эксперт .NET
9205 / 7718 / 1235
Регистрация: 17.09.2011
Сообщений: 13,293
17.03.2012, 11:13 #2
Предпочитаю клонировать - код выглядит понятней, не надо лезть в описание конструктора, чтобы узнать, что ссылка передается для копирования.
Сериализация или десериализация - это уже "кишки" клонирования, здесь все зависит от типа клонируемого объекта и условий задачи.

Цитата Сообщение от Escapable Посмотреть сообщение
лучше воздерживаться от реализации интерфейса ICloneable
Первый раз такое слышу.
А те, кто это говорит, никак не аргументируют свою позицию?
0
Escapable
54 / 54 / 1
Регистрация: 09.11.2010
Сообщений: 120
17.03.2012, 18:50  [ТС] #3
Цитата Сообщение от kolorotur Посмотреть сообщение
А те, кто это говорит, никак не аргументируют свою позицию?
Основной аргумент
The problem with ICloneable is that the Clone method does not explicitly specify whether it is performing a shallow or deep copy, so callers can never be sure.
Вот из обсуждения на stackoverflow
The reason not to use it is because it's vague. It doesn't make clear whether you're getting a shallow or a deep copy; that's up to the implementer.
Просто стало интересно, что здешние разработчики думают по этому поводу.
0
kolorotur
Эксперт .NET
9205 / 7718 / 1235
Регистрация: 17.09.2011
Сообщений: 13,293
17.03.2012, 19:36 #4
Цитата Сообщение от Escapable Посмотреть сообщение
The problem with ICloneable is that the Clone method does not explicitly specify whether it is performing a shallow or deep copy, so callers can never be sure.
The reason not to use it is because it's vague. It doesn't make clear whether you're getting a shallow or a deep copy; that's up to the implementer.
Нормально...
То же самое можно сказать о любом методе не с говорящим названием, включая конструктор или сериализацию.

Именно для этого нужно добавлять комментарии в заголовок метода, описывающие тип клонирования.
Ну или реализовать ICloneable явным образом и вызывать метод DeepClone, например:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
class MyClass : ICloneable
{
   object ICloneable.Clone()
   {
      return DeepCopy();
   }
 
   public MyClass DeepCopy()
   {
      MyClass clone;
      // Perform cloning here
      return clone;
   }
}
0
17.03.2012, 19:36
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.03.2012, 19:36
Привет! Вот еще темы с ответами:

copy constructor operator= - C++
сижу я значит почитываю черновик будущего стандарта и вижу const C& C::operator=( const C& other) { if ( this != &other ) { ...

что делает copy constructor? - C++
что делает copy constructor?

Copy-Constructor В Шаблонном Связном списке - C++
Скажіте пожалуйста где тут ошыбка? Добавлено через 49 секунд Ран тайм ерор кидает в копи конструкторе 100% вот код ...

Copy Constructor Question .Generic inheritance. Templates - C++
Допустим есть проект // // (---.Array_hpp---) // #ifndef Array_HPP // Preprocessor gates #define...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.