zoukankan      html  css  js  c++  java
  • 浅拷贝与深拷贝

    这里就不解释什么是浅拷贝与深拷贝了,只说一下我遇到的问题,然后怎么解决,这样大家什么就明白了

    问题:我要对某一个类的副本进行操作,但是用了各种办法去复制,当我改变副本的东西之后,发现原来的数据也发生了变化,这样是不对的,我只想对其复本操作,原来的数据不能变。

    解决办法:

    [Serializable]//这是必须的。你可以不加试试看

    public class Test

    {  

       string name = String.Empty;

        /// <summary>
            /// 深拷贝
            /// </summary>
            /// <returns></returns>
            public object DeepCopy()
            {
                MemoryStream stream = new MemoryStream();
                BinaryFormatter formatter = new BinaryFormatter();

                formatter.Serialize(stream, this);
                stream.Seek(0, SeekOrigin.Begin);

                object copy = formatter.Deserialize(stream);
                stream.Close();

                return copy;
            }       

    }

    使用:

    Test test = new Test();

    test.name = "1234";

    Test test_copy = (Test)test.DeepCopy();

    test_copy.name = "123";//改变一下它的值然后盾原本的值是否一样。

  • 相关阅读:
    探讨变量的内存分配方式
    色彩之RGB和灰阶
    Perl语言:qw简写
    【转】位操作
    [转]Perl学习笔记
    Spaghetti code&Ravioli code&Lasagna code&Spaghetti with meatballs
    交叉编译lsusb
    GCC,LLVM,Clang编译器对比
    如何判断自己是否到了该辞职的时候
    Javascript Array和String的互转换。
  • 原文地址:https://www.cnblogs.com/pnljs/p/2224991.html
Copyright © 2011-2022 走看看