Copie profonde en C#

Muhammad Maisam Abbas 16 février 2024
Copie profonde en C#

Ce didacticiel présentera la méthode pour créer une copie complète d’un objet de classe en C#.

Objet Deep Copy avec la classe BinaryFormatter en C#

La copie profonde signifie copier chaque champ d’un objet vers un autre objet, tandis que la copie superficielle signifie créer une nouvelle instance de classe et la pointer vers les valeurs de l’instance de classe précédente. Nous pouvons utiliser le BinaryFormatter pour créer une copie complète d’un objet de classe en C#. La classe BinaryFormatter lit et écrit des objets de classe dans un flux au format binaire. Nous pouvons utiliser la méthode BinaryFormatter.Serialize() pour écrire notre objet de classe dans un flux mémoire en C#. On peut alors écrire le même flux mémoire sur un objet avec la méthode BinaryFormatter.Deserialize() et le renvoyer. Nous devons d’abord marquer notre classe avec [Serializable] pour que cette approche fonctionne. L’exemple de code suivant nous montre comment créer une copie complète d’un objet avec la classe BinaryFormatter en C#.

using System;
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;

namespace deep_copy {
  [Serializable]
  public class Sample {
    public string sampleName { get; set; }
  }
  static class ext {
    public static Sample deepCopy<Sample>(this Sample obj) {
      using (var memStream = new MemoryStream()) {
        var bFormatter = new BinaryFormatter();
        bFormatter.Serialize(memStream, obj);
        memStream.Position = 0;

        return (Sample)bFormatter.Deserialize(memStream);
      }
    }
  }
  class Program {
    static void Main(string[] args) {
      Sample s1 = new Sample();
      s1.sampleName = "Sample number 1";
      Sample s2 = s1.deepCopy();
      Console.WriteLine("Sample 1 = {0}", s1.sampleName);
      Console.WriteLine("Sample 2 = {0}", s2.sampleName);
    }
  }
}

Production:

Sample 1 = Sample number 1 Sample 2 = Sample number 1

Dans le code ci-dessus, nous avons créé une copie complète de l’objet s1 de la classe Sample et l’avons sauvegardé dans l’objet s2 de la même classe en utilisant la classe BinarySerializer en C#.

Muhammad Maisam Abbas avatar Muhammad Maisam Abbas avatar

Maisam is a highly skilled and motivated Data Scientist. He has over 4 years of experience with Python programming language. He loves solving complex problems and sharing his results on the internet.

LinkedIn

Article connexe - Csharp Class