Computer >> Máy Tính >  >> Lập trình >> C#

Shallow Copy là gì và nó khác gì với Deep Copy trong C #?

Bản sao nông -

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

"Đố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 bản sao cạn là hai đối tượng không độc lập. Nếu bạn sửa đổi một đối tượng, thay đổi sẽ được phản ánh trong đối tượng kia.

Bản sao sâu -

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

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

Ví dụ

Chương trình
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;
}

Đầu ra

10 10
5 5
10 10
5 10