C#Copy

1、浅拷贝(值类型):

public class LightCopy
    {
        public int Val
        {
            get;
            set;
        }

        public LightCopy(int ival)
        {
            Val = ival;
        }

        public object getCopy()
        {
            return MemberwiseClone();  //浅表副本
        }
    }

测试代码及结果

            LightCopy lcopy = new LightCopy(8);
            MessageBox.Show("" + lcopy.Val);    //8
            LightCopy lcopy1 = (LightCopy)lcopy.getCopy();
            MessageBox.Show("" + lcopy1.Val);   //8
            lcopy1.Val = 3;
            MessageBox.Show("" + lcopy1.Val);   //3
            MessageBox.Show("" + lcopy.Val);    //8    

2、浅拷贝(引用类型):

    public class Content
    {
        public int Val
        {
            get;
            set;
        }
    }

    public class LightCopy
    {
        public Content myContent; 

        public LightCopy(int val)
        {
            myContent = new Content();
            myContent.Val = val;
        }

        public object getCopy()
        {
            return MemberwiseClone();
        }
       
    }

测试代码及结果

            LightCopy lcpy = new LightCopy(8);
            MessageBox.Show("" + lcpy.myContent.Val);    //8
            LightCopylcpy1 = (DeepCopy)lcpy.getCopy();
            MessageBox.Show("" + lcpy1.myContent.Val);   //8
            lcpy.myContent.Val = 3;
            MessageBox.Show("" + lcpy1.myContent.Val);   //3
            MessageBox.Show("" + lcpy.myContent.Val);    //3    

3、深拷贝

        #region ICloneable 成员

        //如果类型继承自ICloneable,但是同时它不是一个Sealed类型的话,它们的子类的默认Clone方法会带来BUG(子类的Clone方法会返回父类的副本,而不是子类本身)。这会逼迫所有的子类都重写Clone方法;
        public object Clone()
        {
            //DeepCopy deepcpy = new DeepCopy(myContent.Val);
            return this.MemberwiseClone();//浅拷贝    
        }

        #endregion

       //深拷贝
public DeepCopy DeepClone() { using (Stream objectStream = new MemoryStream()) { IFormatter formatter = new BinaryFormatter(); formatter.Serialize(objectStream, this); objectStream.Seek(0, SeekOrigin.Begin); return formatter.Deserialize(objectStream) as DeepCopy; } }

 

C#Copy

上一篇:Keil 5 解锁文件 STM32


下一篇:c# 修饰词public, protected, private,internal,protected的区别