Deep Copy in C#
![Deep Copy in C#](/img/Csharp/feature-image---csharp-deep-copy.webp)
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.
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