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#의 객체 지향 특성으로 인해 새 포인터b
도a
의 메모리 위치를 가리 킵니다.
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
의 생성자에 전달했습니다.
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