สำเนาตื้น −
สำเนาตื้นของวัตถุคัดลอกวัตถุ "หลัก" แต่จะไม่คัดลอกวัตถุภายใน
"วัตถุภายใน" ถูกแชร์ระหว่างวัตถุดั้งเดิมกับสำเนา
ปัญหาของสำเนาตื้นคือวัตถุทั้งสองไม่เป็นอิสระ หากคุณแก้ไขวัตถุหนึ่ง การเปลี่ยนแปลงจะมีผลกับอีกวัตถุหนึ่ง
คัดลอกแบบลึก −
สำเนาลึกเป็นสำเนาที่เป็นอิสระอย่างสมบูรณ์ของวัตถุ ถ้าเราคัดลอกวัตถุของเรา เราจะคัดลอกโครงสร้างวัตถุทั้งหมด
หากคุณแก้ไขวัตถุหนึ่ง การเปลี่ยนแปลงจะไม่มีผลกับอีกวัตถุหนึ่ง
ตัวอย่าง
class Program{
static void Main(string[] args){
//Shallow Copy
ShallowCopy obj = new ShallowCopy();
obj.a = 10;
ShallowCopy obj1 = new ShallowCopy();
obj1 = obj;
Console.WriteLine("{0} {1}", obj1.a, obj.a); // 10,10
obj1.a = 5;
Console.WriteLine("{0} {1}", obj1.a, obj.a); //5,5
//Deep Copy
DeepCopy d = new DeepCopy();
d.a = 10;
DeepCopy d1 = new DeepCopy();
d1.a = d.a;
Console.WriteLine("{0} {1}", d1.a, d.a); // 10,10
d1.a = 5;
Console.WriteLine("{0} {1}", d1.a, d.a); //5,10
Console.ReadLine();
}
}
class ShallowCopy{
public int a = 10;
}
class DeepCopy{
public int a = 10;
} ผลลัพธ์
10 10 5 5 10 10 5 10