关于浅拷贝和深拷贝的简单应用测试

直接上代码:这是浅拷贝

   class Cloner2
     {
        public Content MyContent = new Content();
        public Cloner2(int newval)
        {
            MyContent.Val = newval;
        }
        public object GetCopy()
        {
            return MemberwiseClone();
        }
    }
    public class Content//用于上面类的引用。
    {
        public int Val;
    }


            ///浅拷贝
            Cloner2 mySource = new Cloner2(55);//对对象应用复制55;
            Cloner2 myTarget = (Cloner2)mySource.GetCopy();//调用浅拷贝方法,拷贝给新的对象myTarget(注:浅拷贝是付给了指针,不是新空间
            Console.WriteLine("Target.MyContent.Val ={0}", myTarget.MyContent.Val);
            mySource.MyContent.Val = 2;//这里给拷贝后的对象复制,用来验证是否是跟前对象是同一个引用。
            Console.WriteLine("myTarget.MyContent.Val ={0}", myTarget.MyContent.Val);//结果:MemberwiseClone()浅拷贝是指针,指向同一个对象。
            ///
            Console.ReadKey();


///深拷贝:深拷贝继承接口ICloneable,并且在类里面重写Clone()方法。

  class ClonerDip : ICloneable
    {
        public Content myContent = new Content();
        public ClonerDip(int val)
        {
            this.myContent.Val = val;
        }
        public object Clone()
        {
            ClonerDip clonerdip = new ClonerDip(myContent.Val);
            return clonerdip;
        }
    }


  ///深拷贝
            ClonerDip mySource = new ClonerDip(222222);
            ClonerDip myTarget = (ClonerDip)mySource.Clone();
            Console.WriteLine("mySource.MyContent.Val ={0}", mySource.myContent.Val);       //输出结果为:222222
            Console.WriteLine("Target.MyContent.Val ={0}", myTarget.myContent.Val);                //输出结果为:222222
            myTarget.myContent.Val = 5555555;
            Console.WriteLine("mySource.MyContent.Val ={0}", mySource.myContent.Val);          //输出结果为:222222
            Console.WriteLine("myTarget.MyContent.Val ={0}", myTarget.myContent.Val);             ///输出结果为:5555555


            /// 
            ///、、、
            Console.ReadKey();



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值