>백엔드 개발 >C++ >C#에서 개체의 전체 또는 얕은 복사본을 만드는 방법은 무엇입니까?

C#에서 개체의 전체 또는 얕은 복사본을 만드는 방법은 무엇입니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2025-01-13 12:14:44237검색

How to Create a Deep or Shallow Copy of an Object in C#?

C#의 개체 복제

다음 코드는 C#에서 참조 유형(클래스)과 값 유형(구조)의 동작 차이를 보여줍니다. 특히 질문은 다음과 같습니다. C#에서 메모리의 다른 영역을 가리키는 개체의 복사본을 어떻게 생성합니까?

C#의 클래스는 참조 유형입니다. 즉, 클래스 개체를 다른 개체에 할당하면 실제로 동일한 기본 개체에 대한 참조가 할당됩니다. 따라서 두 개체 중 하나를 변경하면 두 인스턴스 모두에 영향을 미칩니다. 제공된 코드에서 objectA를 objectB에 할당하면 별도의 인스턴스가 아닌 objectA의 별칭이 생성됩니다.

객체의 실제 복사본을 만들려면 클래스에 ICloneable 인터페이스를 구현해야 합니다. 이 인터페이스는 객체의 새 인스턴스를 생성하는 Clone() 메서드를 제공합니다. Clone() 메서드를 재정의하면 복제 프로세스를 제어하고 복사해야 하는 필드와 속성을 정의할 수 있습니다.

제공된 코드에서 다음 코드 조각은 복제 구현 방법을 보여줍니다.

<code class="language-csharp">class myClass : ICloneable
{
    public String test;
    public object Clone()
    {
        return this.MemberwiseClone();
    }
}</code>

클래스가 ICloneable을 구현하면 다음 코드를 사용하여 실제 복사본을 만들 수 있습니다.

<code class="language-csharp">myClass a = new myClass();
myClass b = (myClass)a.Clone();</code>

MemberwiseClone()은 모든 필드와 속성의 값을 복사하지만 중첩된 개체는 복사하지 않는 얕은 복사본을 생성한다는 점에 유의해야 합니다. 전체 복사본을 생성해야 하는 경우 중첩된 개체를 고려하는 사용자 지정 복제 프로세스를 구현해야 합니다.

위 내용은 C#에서 개체의 전체 또는 얕은 복사본을 만드는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.