S_pot
210525 C#_얕은복사(Shallow), 깊은복사(Deep) 본문
using System;
// 얕은복사, 깊은복사 예제
namespace _210525_001
{
class MyClass
{
public int MyField1; // 인스턴스 변수
public int MyField2; // 인스턴스 변수
public MyClass DeepCopy() // 반환값: MyClass 래퍼런스
{
MyClass newCopy = new MyClass(); // 새로운 MyClass를 생성
newCopy.MyField1 = this.MyField1; // this는 source.MyField1
newCopy.MyField2 = this.MyField2; // this는 source.MyField2
return newCopy;
}
~MyClass()
{
Console.WriteLine("소멸자 호출");
}
}
class MainApp
{
static void Main(string[] args)
{
Console.WriteLine("Shallow Copy");
{
MyClass source = new MyClass();
source.MyField1 = 10;
source.MyField2 = 20;
MyClass target = source;
target.MyField2 = 30;
Console.WriteLine($"{source.MyField1} {source.MyField2}");
Console.WriteLine($"{target.MyField1} {target.MyField2}");
} // source, target 스택에서 삭제, MyClass 객체도 삭제
Console.WriteLine("Deep Copy");
{
MyClass source = new MyClass();
source.MyField1 = 10;
source.MyField2 = 20;
MyClass target = source.DeepCopy(); // 17번줄의 return값이 된다. MyField1 = 10, MyField2 = 20
target.MyField2 = 30;
Console.WriteLine($"{source.MyField1} {source.MyField2}");
Console.WriteLine($"{target.MyField1} {target.MyField2}");
}
}
}
}
출력값
'C#' 카테고리의 다른 글
210525 C#_상속 (0) | 2021.05.25 |
---|---|
210525 C#_this() 생성자 (0) | 2021.05.25 |
210524 C#_정적필드와 메소드(static) (0) | 2021.05.24 |
210524 C#_인스턴스변수, 지역변수, 생성자, 소멸자, stack형 소멸순서 (0) | 2021.05.24 |
210521 C#_생성자 실습 (0) | 2021.05.21 |