Maison >développement back-end >C++ >Comment copier-elles des objets en profondeur dans .NET?

Comment copier-elles des objets en profondeur dans .NET?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2025-02-02 14:01:10205parcourir

How to Deep Copy Objects in .NET?

réalisant des copies profondes des objets dans .NET

Cet article relève le défi de créer des copies profondes des objets dans le framework .NET, offrant une solution comparable à la fonctionnalité de copie profonde inhérente de Java.

La solution:

Une méthode d'utilité générique fournit une approche simple de la copie profonde:

<code class="language-csharp">public static T DeepClone<T>(this T obj)
{
    using (var ms = new MemoryStream())
    {
        var formatter = new BinaryFormatter();
        formatter.Serialize(ms, obj);
        ms.Position = 0;
        return (T)formatter.Deserialize(ms);
    }
}</code>

Considération critique:

Il est crucial de reconnaître que BinaryFormatter, employé dans cette méthode, est obsolète et prévu pour le retrait de .NET. Explorez des stratégies de copie profonde alternatives pour une compatibilité future.

Détails de l'implémentation:

Pour utiliser cette méthode, assurez-vous que votre classe est marquée de l'attribut [Serializable]. Inclure les espaces de noms nécessaires:

<code class="language-csharp">using System.Runtime.Serialization.Formatters.Binary;
using System.IO;</code>

Mécanisme:

Le processus implique deux étapes de clé:

  1. Sérialisation: L'objet d'entrée est sérialisé à l'aide de BinaryFormatter, le stockant dans un flux de mémoire.
  2. désérialisation: Les données sérialisées sont récupérées du flux, entraînant la création d'un nouvel objet indépendant. Ce nouvel objet constitue une copie profonde.

mises en garde:

  • Cette méthode ne fonctionne que avec des classes sérialisables.
  • Les références circulaires dans la structure de l'objet peuvent conduire à des exceptions.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn