C#에서 개체 복사

Muhammad Maisam Abbas 2024년2월16일
  1. C#에서MemberWiseClone()메서드를 사용하여 개체 복사
  2. C#에서 매개 변수가있는 생성자 메서드를 사용하여 개체 복사
C#에서 개체 복사

이 자습서에서는 C#에서 개체를 복사하는 방법을 소개합니다.

C#에서MemberWiseClone()메서드를 사용하여 개체 복사

불행히도 C#에서 개체의 별도 복사본을 만드는 기본 제공 방법은 없습니다. 이 현상은 다음 코드 예제에서 설명됩니다.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace copy_an_object {
  class myClass {
    public String test;
  }
  class Program {
    static void Main(string[] args) {
      myClass a = new myClass();
      a.test = "This is a test";
      myClass b = a;
      b.test = "This is not a test";
      Console.WriteLine(a.test);
      Console.WriteLine(b.test);
    }
  }
}

출력:

This is not a test
This is not a test

C#의 클래스 인스턴스는 특정 메모리 위치를 가리키는 참조 유형 변수이기 때문에 두 번 모두 동일한 출력을 얻습니다. C#의 객체 지향 특성으로 인해 새 포인터ba의 메모리 위치를 가리 킵니다.

b에 대해 별도의 메모리 위치를 생성하려면 몇 가지 사용자 정의 접근 방식에 의존해야합니다. MemberWiseClone()메서드는 C#에서 호출 개체의 값에 대한 별도의 복사본을 만드는 데 사용됩니다. MemberWiseClone()함수의 반환 유형은 객체입니다. 다음 코드 예제는 C#에서MemberWiseClone()함수를 사용하여 클래스 개체의 별도 복사본을 만드는 방법을 보여줍니다.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace copy_an_object {
  class myClass {
    public String test;
    public object Clone() {
      return this.MemberwiseClone();
    }
  }
  class Program {
    static void Main(string[] args) {
      myClass a = new myClass();
      a.test = "This is a test";
      myClass b = (myClass)a.Clone();
      b.test = "This is not a test";
      Console.WriteLine(a.test);
      Console.WriteLine(b.test);
    }
  }
}

출력:

This is a test
This is not a test

이번에는 각 클래스 객체에 대해 별도의 복사본이 있다는 것이 출력에서 ​​분명합니다. myClass클래스의Clone()함수 내에MemberWiseClone()함수를 구현했습니다. Clone()함수는 클래스 객체의 별도 사본을 반환합니다. Clone()함수의 반환 값은myClass로 유형 캐스팅되고b클래스 객체가 가리 킵니다.

C#에서 매개 변수가있는 생성자 메서드를 사용하여 개체 복사

C#에서 동일한 목표를 달성하기 위해 매개 변수가있는 클래스 생성자를 만들 수 있습니다. 이전 클래스 객체를 새 클래스 객체의 생성자에 전달하고 여기에서 모든 값을 복사 할 수 있습니다. 다음 코드 예제는 C#에서 매개 변수가있는 생성자 메서드를 사용하여 클래스 개체의 별도 복사본을 만드는 방법을 보여줍니다.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace copy_an_object {
  class MyClass {
    public String test;

    public MyClass() {}

    public MyClass(MyClass other) {
      test = other.test;
    }
  }
  class Program {
    static void Main(string[] args) {
      MyClass a = new myClass();
      a.test = "This is a test";
      MyClass b = new MyClass(a);
      b.test = "This is not a test";
      Console.WriteLine(a.test);
      Console.WriteLine(b.test);
    }
  }
}

출력:

This is a test
This is not a test

MyClass클래스의 객체를 가져와 여기에서test문자열을 복사하는MyClass클래스에 대한 매개 변수화 된 생성자를 만들었습니다. 메인 함수에서MyClass클래스의a객체를 생성하여b의 생성자에 전달했습니다.

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