zoukankan      html  css  js  c++  java
  • C#浅拷贝与深拷贝测试

    1.浅拷贝与深拷贝

      浅拷贝:只复制对象的基本类型,对象类型,仍属于原来的引用. 
          深拷贝:不紧复制对象的基本类,同时也复制原对象中的对象.就是说完全是新对象产生的.

    2.浅拷贝与深拷贝的区别

       浅拷贝是指将对象中的数值类型的字段拷贝到新的对象中,而对象中的引用型字段则指复制它的一个引用到目标对象。如果改变目标对象中引用型字段的值他将反映在原始对象中,也就是说原始对象中对应的字段也会发生变化。

           深拷贝与浅拷贝不同的是对于引用的处理,深拷贝将会在新对象中创建一个新的和原始对象中对应字段相同(内容相同)的字段,也就是说这个引用和原始对象的引用是不同的,我们在改变新对象中的这个字段的时候是不会影响到原始对象中对应字段的内容。

    3.浅拷贝与深拷贝测试

        public class TestClass
        {
            public TestClass()
            {
                this.Num = 1;
                this.Remark = "r";
                this.Data = new Data { Name = "a", SortNum = 1 };
            }
    
            public int Num { get; set; }
            public string Remark { get; set; }
            public Data Data { get; set; }
    
            //浅拷贝
            public TestClass Clone()
            {
                return (TestClass)this.MemberwiseClone();
            }
    
            //深拷贝
            public TestClass DeepClone()
            {
                TestClass t = new TestClass();
                t.Num = this.Num;
                t.Remark = this.Remark;
                t.Data = new Data { Name = this.Data.Name, SortNum = this.Data.SortNum };
                return t;
            }
        }
    
        public class Data
        {
            public string Name { get; set; }
            public int SortNum { get; set; }
        }
    

     测试代码:

     static void Main(string[] args)
            {
                TestClass t1 = new TestClass();
                TestClass t2 = t1.Clone();
                TestClass t3 = t1.DeepClone();
                t1.Num = 2;
                t1.Remark = "r2";
                t1.Data.SortNum = 2;
                t1.Data.Name = "b";
    
                Console.WriteLine("t1   num:{0} remark:{1} name:{2} sortnum:{3}", t1.Num,t1.Remark, t1.Data.Name, t1.Data.SortNum);
                Console.WriteLine("t2   num:{0} remark:{1} name:{2} sortnum:{3}", t2.Num,t2.Remark, t2.Data.Name, t2.Data.SortNum);
                Console.WriteLine("t3   num:{0} remark:{1} name:{2} sortnum:{3}", t3.Num,t3.Remark, t3.Data.Name, t3.Data.SortNum);
               
                Console.ReadLine();
            }
    

     测试结果:

  • 相关阅读:
    react 给选中的li添加样式
    纯css实现移动端横向滑动列表
    从一个Git仓库转移到另外一个仓库
    create-react-app 创建react项目 多页面应用
    JetBrains出品,一款好用到爆的数据库工具
    gloox环境搭建并运行example(小白教程,有图版本)
    Dubbo服务注册原理
    永久解决 matplotlib 图例中文方块错误
    对称二叉树
    SpringBoot运行原理
  • 原文地址:https://www.cnblogs.com/DCLi/p/Clone.html
Copyright © 2011-2022 走看看