C# 对象深复制

Mark:

//实现IClonable接口并重写Clone方法就可以实现深克隆了

        #region ICloneable 成员

        public object Clone()
        {
            MemoryStream ms = new MemoryStream();

            BinaryFormatter bf = new BinaryFormatter();
            bf.Serialize(ms, this);
            ms.Seek(0, 0);
            object value = bf.Deserialize(ms);

            ms.Close();

            return value;//this.MemberwiseClone();

        }

        #endregion    
时间: 2024-10-08 05:48:05

C# 对象深复制的相关文章

js 对象深复制,创建对象和继承

js 对象深复制,创建对象和继承.主要参考高级编程第三版,总结网上部分资料和自己的代码测试心得.每走一小步,就做一个小结. 1.对象/数组深复制 一般的=号传递的都是对象/数组的引用,如在控制台输入 var a=[1,2,3], b=a; b[0]=0; a[0] 此时显示的结果为0,也就是说a和b指向的是同一个数组,只是名字不一样罢了. 单层深复制: 1.js的slice函数: 返回一个新的数组,包含下标从 start 到 end (不包括该元素,此参数可选)的元素. 控制台输入: var a

JavaScript对象深复制

1.原理 使用JSON,当然需要JSON安全的格式,JSON安全请参考:http://www.cnblogs.com/mengfangui/p/8257269.html 2.示例 <!DOCTYPE html> <html lang="zh"> <head> <meta charset="UTF-8" /> <title>使用JSON实现对象深复制</title> </head> &

实现JS对象深复制的简单方案

前段时间开jQuery源代码的时候,正好看到jQuery.extend的实现方案,忽然想到对象的深复制和浅表复制的问题. 因为引用类型对象的存在,所以简单的使用"="只能实现引用关系的复制,所以当其中一个引用指向的变量发生变化的时候,相应的另外一个引用也会发生变化. 所以很多时候也称这种复制为浅表复制.那么如何才能实现对象的深复制呢?以下是实现深复制的简单实现代码,仅供参考. 1 function copyObject(target){ 2 return _copy(target);

Java对象深复制、浅复制

我们在编码过程经常会碰到将一个对象传递给另一个对象,java中对于基本型变量采用的是值传递,而对于对象比如bean传递时采用的引用传递也就是地址传递,而很多时候对于对象传递我们也希望能够象值传递一样,使得传递之前和之后有不同的内存地址,在这种情况下我们一般采用以下两种情况. 浅复制与深复制概念 浅复制(浅克隆) :被复制对象的所有变量都含有与原来的对象相同的值,而所有的对其他对象的引用仍然指向原来的对象.换言之,浅复制仅仅复制所考虑的对象,而不复制它所引用的对象. 深复制(深克隆) :被复制对象

JavaScript中对象深复制

参考: http://perfectionkills.com/instanceof-considered-harmful-or-how-to-write-a-robust-isarray/

Javascript 浅复制与深复制

在理解JS的深浅复制之前,我觉得有必要先提及一下关于值传递与引用传递. 在JS中,基本类型值的复制是按值传递的,而引用类型值的复制则是按引用传递的.值传递复制的对象间不会有任何牵连,互相独立:但是引用传递复制的对象间则会相互影响,修改其中任何一方的值都会在另一方中体现.之所以会有这样的表现和JS的内存机制有关. JS的内存也分为堆和栈,注意这里的堆栈和数据结构的堆栈是不同的概念. 栈:由系统自动分配,自动回收,效率高,但容量小 堆:由程序员手动分配内存,并且手动销毁(高级语言如JS中有垃圾自动回

关于copy深复制与浅复制的理解

浅复制:浅复制(浅拷贝,指针拷贝,shallow copy),源对象和副本对象是同一个对象, 源对象(副本对象)引用计数器 + 1, 相当于做一次retain操作. 本质是:没有产生新的对象 深复制:(深拷贝,内容拷贝,deep copy),源对象和副本对象是不同的两个对象,源对象引用计数器不变, 副本对象计数器            为1(因为是新产生的) 本质是:产生了新的对象 *只有源对象和副本对象都不可变时,才是浅复制,其它都是深复制

Objective-C:OC内部可变对象和不可变对象的深(复制)拷贝问题思考:

OC内部:可变对象和不可变对象的深(复制)拷贝问题思考: 不可变对象: 例如NSString对象,因为NSString对象是常量字符串,所以,不可以更改其内容,但是可以修改指向该字符串的指针指向.当对NSString对象做深拷贝时,如果是copy复制方式,其实就是浅复制,只是复制了同一个对象的指针:如果是mutableCopy复制方式,系统会分配一个新的内存空间用来存放复制出来的NSMutableString对象,此时地址是新的,内容是一样的,他们正在被不同的实例变量字符串指针指着. 可变对象:

Java对象的深复制----利用串行化进行深复制

把对象写到流里的过程是串行化(Serilization)过程,但是在Java程序圈里又非常形象地称为“冷冻”或者“腌咸菜”过程:而把对象从流中读出来的并行化(Deserialization)过程则叫做“解冻”或者“回鲜”过程.应当指出的是,写到流里的是对象的一个拷贝,而原来对象仍然存在于JVM里面,因此“腌成咸菜”的只是对象的一个拷贝. 在Java语言里深复制一个对象,常常可以先使对象实现Serializable接口,然后把对象(实际上只是对象的一个拷贝)写到一个流里(腌成咸菜),再从流里读回来