浅拷贝与深拷贝

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

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

解决办法:

[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";//改变一下它的值然后盾原本的值是否一样。

posted @ 2011-10-26 11:49  pnljs  阅读(218)  评论(0编辑  收藏  举报