浅复制 深复制 序列化

  • 浅复制

  值类型的复制没有浅复制或深复制之说。浅(深)复制针对的是引用类型。比如数组Array的Clone()就是浅复制,对于值类型数组,克隆方法会产生两个独立的数组,克隆引用类型数组会产生指向相同对象的两个数组。

     举例,数组的Clone()方法,返回object类型的引用,它必须被强制转换成数组类型。

static void Main(){
    int[] intArr1={1,2,3};
    int[] intArr2=(int[])intArr1.Clone();
    intArr2[0]=100,intArr2[1]=200;intArr2[2]=300;
}

上述图解:

class A{
    public int value=5;
}
class Program{
    static void Main(){
        A[] AArray1=new A[3]{new A(),new A(),new A()};
        A[] AArray2=(A[])AArray1.Clone();
        AArray2[0].Value=100;
        AArray2[1].Value=200;
        AArray2[3].Value=300;
    }
}

上述图解:

  • 序列化

  前面博客(http://www.cnblogs.com/tobecabbage/p/3492566.html)已有记录

      序列化复习

  序列化的定义:直接将内存中的数组原封不动的以特定的格式形式存储起来。

  -》二进制序列化(将内存中的数组直接以二进制的形式取出)

    -》步骤:

      1.创建一个文件流

      2.确保对象可以被序列化,给类前面加上[Serializable]。比如int类前就加了[Serializable]

      3.BinaryFormatter

      4.Serialize()或者DeSerialize()反序列化

  -》XML序列化

  ♦ 用序列化反序列化实现深复制

  

原文地址:https://www.cnblogs.com/tobecabbage/p/3542010.html