Перейти к содержанию

Глубокое копирование объектов [C#]

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (Пока оценок нет)
Загрузка...

[ Полезный рекламный блок ]

Попробуйте свои силы в игре, где ваши навыки программирования на C# станут решающим фактором. Переходите по ссылке 🔰.


В C# клонирование объекта означает создание его копии. Однако существует два типа клонирования: неглубокое клонирование и глубокое клонирование.

При неглубоком клонировании создается новый объект, который является копией исходного объекта, но содержимое копии по-прежнему указывает на те же объекты, что и оригинал. Это означает, что изменения, внесенные в свойства копии, также повлияют на оригинал.

Глубокое клонирование, с другой стороны, создает новый объект, который является копией оригинала, но содержимое копии также копируется, поэтому у двух объектов нет общих ссылок. Это означает, что изменения, внесенные в свойства копии, не повлияют на оригинал.

В C# существует несколько способов глубокого клонирования объекта, включая реализацию интерфейса ICloneable, использование сериализации и десериализации, а также использование сторонних библиотек, таких как AutoMapper, Newtonsoft.Json или BinaryFormatter.

Сериализации и десериализация

Один из распространенных подходов — использование сериализации и десериализации. Вот пример:

В этом примере мы определяем простой класс MyClass, который имеет два свойства: Number и Text. Затем мы создаем экземпляр MyClass и сериализуем его в поток памяти с помощью BinaryFormatter. Мы сбрасываем позицию потока в начало, а затем десериализуем объект обратно в новый экземпляр MyClass под названием copy. Наконец, мы изменяем свойства копии и проверяем, что свойства оригинала остались неизменными.

Использование сериализации и десериализации предполагает сериализацию исходного объекта в поток байтов, а затем его десериализацию обратно в новый объект. Этот подход может быть медленнее, чем другие методы, но он часто проще в реализации.

Реализация интерфейса ICloneable

Для начала рассмотрим пример не глубокого клонирования:

Использование:

 

Теперь, пример с глубоким клонированием:

Или можно сделать следующим образом:

Использование:

 

 

Опубликовано в рубрикеОтветы на Вопросы C#
Подписаться
Уведомить о
guest
0 комментариев
Межтекстовые Отзывы
Посмотреть все комментарии
0
Оставьте комментарий! Напишите, что думаете по поводу статьи.x