Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C#

Sao Chép Nông (Shallow Copy) Là Gì Và Khác Với Sao Chép Sâu (Deep Copy) Trong C# Như Thế Nào?


Sao Chép Nông (Shallow Copy) −

Một bản sao nông của đối tượng sao chép đối tượng "chính", nhưng không sao chép các đối tượng bên trong.

Các "đối tượng bên trong" được chia sẻ giữa đối tượng gốc và bản sao của nó.

Vấn đề với sao chép nông là hai đối tượng không độc lập. Nếu bạn sửa đổi đối tượng này, thay đổi sẽ phản ánh trong đối tượng kia.

Sao Chép Sâu (Deep Copy) −

Một bản sao sâu là bản sao độc lập hoàn toàn của một đối tượng. Nếu chúng ta sao chép đối tượng của mình, chúng ta sẽ sao chép toàn bộ cấu trúc đối tượng.

Nếu bạn sửa đổi đối tượng này, thay đổi sẽ không phản ánh trong đối tượng kia.

Ví Dụ

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

Kết Quả

10 10 
5 5 
10 10 
5 10