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