C#의 전체 복사
이 자습서에서는 C#에서 클래스 개체의 전체 복사본을 만드는 방법을 소개합니다.
C#에서BinaryFormatter
클래스를 사용하는 전체 복사 개체
전체 복사는 객체의 모든 필드를 다른 객체로 복사하는 것을 의미하고 얕은 복사는 새 클래스 인스턴스를 만들고 이전 클래스 인스턴스의 값을 가리키는 것을 의미합니다. BinaryFormatter
를 사용하여 C#에서 클래스 개체의 전체 복사본을 만들 수 있습니다. BinaryFormatter
클래스는 이진 형식의 스트림에 클래스 객체를 읽고 씁니다. BinaryFormatter.Serialize()
메서드를 사용하여 클래스 객체를 C#의 메모리 스트림에 쓸 수 있습니다. 그런 다음 BinaryFormatter.Deserialize()
메소드를 사용하여 동일한 메모리 스트림을 객체에 쓰고 반환 할 수 있습니다. 이 접근 방식이 작동하려면 먼저 클래스를[Serializable]
로 표시해야합니다. 다음 코드 예제는 C#에서BinaryFormatter
클래스를 사용하여 개체의 전체 복사본을 만드는 방법을 보여줍니다.
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);
}
}
}
출력:
Sample 1 = Sample number 1
Sample 2 = Sample number 1
위의 코드에서Sample
클래스의s1
오브젝트의 전체 사본을 작성하고 C#의BinarySerializer
클래스를 사용하여 동일한 클래스의s2
오브젝트에 저장했습니다.
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