• c# 浅拷贝vs深拷贝


    浅拷贝(Shallow Copy)

    定义

    创建一个新对象,然后将当前对象的值类型字段复制到新对象中。 但是当数据是引用类型时,复制唯一的引用而不是引用的对象本身。 因此 original 和 clone 指的是同一个对象。
    在这里插入图片描述

    using System;
          
    class Example {
          
    // Main Method
    static void Main(string[] args)
    {
          
        Company c1 = new Company(548, "GeeksforGeeks",
                                      "Sandeep Jain");
          
        // Performing Shallow copy                      
        Company c2 = (Company)c1.Shallowcopy(); 
      
        Console.WriteLine("Before Changing: ");
          
        // Before changing the value of
        // c2 GBRank and CompanyName
        Console.WriteLine(c1.GBRank);
        Console.WriteLine(c2.GBRank);
        Console.WriteLine(c2.desc.CompanyName);
        Console.WriteLine(c1.desc.CompanyName);
      
        // changing the value of c2 GBRank
        // and CompanyName
        c2.GBRank = 59;
        c2.desc.CompanyName = "GFG";
      
        Console.WriteLine("\nAfter Changing: ");
          
        // After changing the value of 
        // c2 GBRank and CompanyName
        Console.WriteLine(c1.GBRank);
        Console.WriteLine(c2.GBRank);
        Console.WriteLine(c2.desc.CompanyName);
        Console.WriteLine(c1.desc.CompanyName);
    }
    }
      
      
    class Company 
    {
              
        public int GBRank;
        public CompanyDescription desc;
          
        public Company(int gbRank, string c,
                                   string o)
        {
            this.GBRank = gbRank;
            desc = new CompanyDescription(c, o);
        }
          
        // method for cloning object
        public object Shallowcopy()
        {
            return this.MemberwiseClone();
        }
          
        // method for cloning object
        public Company DeepCopy()
        {
            Company deepcopyCompany = new Company(this.GBRank,
                                desc.CompanyName, desc.Owner);
            return deepcopyCompany;
        }
    }
          
          
    class CompanyDescription 
    {
          
        public string CompanyName;
        public string Owner;
        public CompanyDescription(string c, string o)
        {
            this.CompanyName = c;
            this.Owner = o;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80

    Before Changing:
    548
    548
    GeeksforGeeks
    GeeksforGeeks

    After Changing:
    548
    59
    GFG
    GFG

    深拷贝(Deep Copy)

    定义

    它是一个创建新对象,然后将当前对象的字段复制到新创建的对象中,以完整复制内部引用类型的过程。 如果指定的字段是值类型,则将执行该字段的逐位复制。 如果指定的字段是引用类型,则执行引用对象的新副本。

    在这里插入图片描述

    using System;
      
    namespace ShallowVSDeepCopy {
          
    class Program {
          
        // Main Method
        static void Main(string[] args)
        {
            Company c1 = new Company(548, "GeeksforGeeks",
                                          "Sandeep Jain");
            // Performing Deep copy                             
            Company c2 = (Company)c1.DeepCopy(); 
      
            Console.WriteLine("Before Changing: ");
               
            // Before changing the value of 
            // c2 GBRank and CompanyName
            Console.WriteLine(c1.GBRank);
            Console.WriteLine(c2.GBRank);
            Console.WriteLine(c2.desc.CompanyName);
            Console.WriteLine(c1.desc.CompanyName);
      
            Console.WriteLine("\nAfter Changing: ");
              
            // changing the value of c2 
            // GBRank and CompanyName
            c2.GBRank = 59;
            c2.desc.CompanyName = "GFG";
      
            // After changing the value of
            // c2 GBRank and CompanyName
            Console.WriteLine(c1.GBRank);
            Console.WriteLine(c2.GBRank);
            Console.WriteLine(c2.desc.CompanyName);
            Console.WriteLine(c1.desc.CompanyName);
        }
    }
      
    class Company {
          
        public int GBRank;
        public CompanyDescription desc;
      
        public Company(int gbRank, string c, 
                                   string o)
        {
            this.GBRank = gbRank;
            desc = new CompanyDescription(c, o);
        }
          
        // method for cloning object
        public object Shallowcopy()
        {
            return this.MemberwiseClone();
        }
          
        // method for cloning object
        public Company DeepCopy()
        {
            Company deepcopyCompany = new Company(this.GBRank,
                               desc.CompanyName, desc.Owner);
                                 
            return deepcopyCompany;
        }
    }
      
    class CompanyDescription {
          
        public string CompanyName;
        public string Owner;
        public CompanyDescription(string c, 
                                 string o)
        {
            this.CompanyName = c;
            this.Owner = o;
        }
    }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79

    Before Changing:
    548
    548
    GeeksforGeeks
    GeeksforGeeks

    After Changing:
    548
    59
    GFG
    GeeksforGeeks

  • 相关阅读:
    周赛补题(AcWing、力扣)
    YB6502 5V输入双节串联磷酸铁锂电池升压充电芯片
    PyTorchの可视化工具
    2022年危险化学品经营单位安全管理人员考题及答案
    阿里低代码Low Code Engine快速上手
    【网络】用代码讲解HTTP协议
    经典面试题第十二更---valueOf和toString
    lxcfs 源码安装(RHEL)
    C语言指针讲解-------进阶篇(下篇)
    SIM800C模块AT指令编程指南
  • 原文地址:https://blog.csdn.net/a_codecat/article/details/127823392