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);