Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C#

Shallow Copy คืออะไรและแตกต่างจาก Deep Copy ใน C # อย่างไร


สำเนาตื้น

สำเนาตื้นของวัตถุคัดลอกวัตถุ "หลัก" แต่จะไม่คัดลอกวัตถุภายใน

"วัตถุภายใน" ถูกแชร์ระหว่างวัตถุดั้งเดิมกับสำเนา

ปัญหาของสำเนาตื้นคือวัตถุทั้งสองไม่เป็นอิสระ หากคุณแก้ไขวัตถุหนึ่ง การเปลี่ยนแปลงจะมีผลกับอีกวัตถุหนึ่ง

คัดลอกแบบลึก

สำเนาลึกเป็นสำเนาที่เป็นอิสระอย่างสมบูรณ์ของวัตถุ ถ้าเราคัดลอกวัตถุของเรา เราจะคัดลอกโครงสร้างวัตถุทั้งหมด

หากคุณแก้ไขวัตถุหนึ่ง การเปลี่ยนแปลงจะไม่มีผลกับอีกวัตถุหนึ่ง

ตัวอย่าง

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