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

来源:互联网 发布:网络歌手柔情的原名 编辑:程序博客网 时间:2024/06/16 02:36

直接上代码:这是浅拷贝

   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
原创粉丝点击