C#의 전체 복사

Muhammad Maisam Abbas 2023년10월12일
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오브젝트에 저장했습니다.

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

관련 문장 - Csharp Class