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

Deep Copy Object ใน .NET (C#)

Deep Copy** = คัดลอก Object รวมถึง Object ทั้งหมดที่มันอ้างอิง (Reference Types) → ได้ Instance แยกกันสมบูรณ์

ต่างจาก Shallow Copy ที่คัดลอกแค่ Reference

ตัวอย่าง Manual Deep Copy

class DeepCopy
{
    public int a = 10;
}

class Program
{
    static void Main()
    {
        DeepCopy d = new DeepCopy { a = 10 };
        DeepCopy d1 = new DeepCopy { a = d.a }; // Manual Copy Value
        
        Console.WriteLine($"{d1.a} {d.a}"); // 10 10
        
        d1.a = 5; // แก้ d1 ไม่ส่งผลต่อ d
        Console.WriteLine($"{d1.a} {d.a}"); // 5 10
    }
}

Output

10 10
5 10

วิธี Deep Copy ทั่วไป

  • Manual: สร้าง Instance ใหม่ Copy Field ทีละตัว (เหมาะกับ Class เรียบง่าย)
  • Serialization: Serialize → Deserialize (JSON/Binary) ได้ Deep Copy อัตโนมัติ
  • ICloneable: Implement Clone() Method
  • Constructor Copy: new MyClass(existing)
  • Libraries: AutoMapper, DeepCloner, Newtonsoft.Json

Serialization Example

// JSON Round-trip
string json = JsonConvert.SerializeObject(original);
var deepCopy = JsonConvert.DeserializeObject(json);