Deep Copy in C#

Muhammad Maisam Abbas 16 Februar 2024
Deep Copy in C#

In diesem Lernprogramm wird die Methode zum Erstellen einer tiefen Kopie eines Klassenobjekts in C# vorgestellt.

Deep Copy-Objekt mit der Klasse BinaryFormatter in C#

Tiefes Kopieren bedeutet, jedes Feld eines Objekts in ein anderes Objekt zu kopieren, während flaches Kopieren bedeutet, eine neue Klasseninstanz zu erstellen und auf die Werte der vorherigen Klasseninstanz zu verweisen. Wir können den BinaryFormatter verwenden, um eine tiefe Kopie eines Klassenobjekts in C# zu erstellen. Die Klasse BinaryFormatter liest und schreibt Klassenobjekte im Binärformat in einen Stream. Wir können die Methode BinaryFormatter.Serialize() verwenden, um unser Klassenobjekt in einen Speicherstrom in C# zu schreiben. Wir können dann denselben Speicherstrom mit der Methode BinaryFormatter.Deserialize() in ein Objekt schreiben und ihn zurückgeben. Wir müssen unsere Klasse zuerst mit [Serializable] markieren, damit dieser Ansatz funktioniert. Das folgende Codebeispiel zeigt, wie Sie eine tiefe Kopie eines Objekts mit der Klasse BinaryFormatter in C# erstellen.

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);
    }
  }
}

Ausgabe:

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

Im obigen Code haben wir eine tiefe Kopie des Objekts s1 der Klasse Sample erstellt und es mit der Klasse BinarySerializer in C# im Objekt s2 derselben Klasse gespeichert.

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

Verwandter Artikel - Csharp Class