Copia profonda in C#
Questo tutorial introdurrà il metodo per creare una copia completa di un oggetto classe in C#.
Oggetto Deep Copy con la classe BinaryFormatter
in C#
Copia profonda significa copiare ogni campo di un oggetto su un altro oggetto, mentre copia superficiale significa creare una nuova istanza di classe e indirizzarla ai valori dell’istanza di classe precedente. Possiamo usare il BinaryFormatter
per creare una copia completa di un oggetto di classe in C#. La classe BinaryFormatter
legge e scrive oggetti di classe in un flusso in formato binario. Possiamo usare il metodo BinaryFormatter.Serialize()
per scrivere il nostro oggetto di classe in un flusso di memoria in C#. Possiamo quindi scrivere lo stesso flusso di memoria su un oggetto con il metodo BinaryFormatter.Deserialize()
e restituirlo. Dobbiamo prima contrassegnare la nostra classe con [Serializable]
affinché questo approccio funzioni. Il seguente esempio di codice ci mostra come creare una copia completa di un oggetto con la classe BinaryFormatter
in 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);
}
}
}
Produzione:
Sample 1 = Sample number 1 Sample 2 = Sample number 1
Nel codice precedente, abbiamo creato una copia completa dell’oggetto s1
della classe Sample
e l’abbiamo salvata nell’oggetto s2
della stessa classe utilizzando la classe BinarySerializer
in C#.
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