c#:如何处理对对象进行深度拷贝

 1 /// <summary>
 2         /// 对对象进行深度拷贝
 3         /// </summary>
 4         /// <param name="obj"></param>
 5         /// <returns></returns>
 6         private object Clone(object obj)
 7         {
 8             MemoryStream memory_stream = new MemoryStream();
 9             BinaryFormatter formatter = new BinaryFormatter();
10
11             formatter.Serialize(memory_stream,obj);
12             memory_stream.Position = 0;
13
14             return formatter.Deserialize(memory_stream);
15         }
时间: 2024-10-08 16:40:13

c#:如何处理对对象进行深度拷贝的相关文章

深度拷贝java对象

有时,如,修改session中对象的时候,如果直接修改session中的对象,修改步骤比较多,一部分修改成功,另一部分不成功,这个时候程序报错,数据库会回滚,但是session已经修改一部分了. 这样就造成数据不一致了. 那么,我们不能直接修改这个对象了,我们应该拷贝对象,最好深拷贝. 参考代码,http://blog.csdn.net/isea533/article/details/9375907 深度拷贝java对象

这个代码能很好的明说深度拷贝

浅度拷贝:只复制一个对象,对象内部存在的指向其他对象数组或者引用则不复制. 深度拷贝:对象,对象内部的引用均复制. 具体我们通过例子分析一下: class Professor implements Cloneable //所有要进行克隆的对象所属的类必须实现java.lang.Cloneable接口 { private String pname;private int page; public String getPname() {return pname;} public void setPn

拷贝构造,深度拷贝,关于delete和default相关的操作,explicit,类赋初值,构造函数和析构函数,成员函数和内联函数,关于内存存储,默认参数,静态函数和普通函数,const函数,友元

 1.拷贝构造 //拷贝构造的规则,有两种方式实现初始化. //1.一个是通过在后面:a(x),b(y)的方式实现初始化. //2.第二种初始化的方式是直接在构造方法里面实现初始化. 案例如下: #include<iostream> //如果声明已经定义,边不会生成 class classA { private: int a; int b; public: //拷贝构造的规则,有两种方式实现初始化 //1.一个是通过在后面:a(x),b(y)的方式实现初始化 //2.第二种初始化的方式是直

Python 直接赋值、浅拷贝和深度拷贝解析

直接赋值:其实就是对象的引用(别名). 浅拷贝(copy):拷贝父对象,不会拷贝对象的内部的子对象. 深拷贝(deepcopy): copy 模块的 deepcopy 方法,完全拷贝了父对象及其子对象. 字典浅拷贝实例 实例 >>> a = {1: [1,2,3]} >>> b = a.copy() >>> a, b ({1: [1, 2, 3]}, {1: [1, 2, 3]}) >>> a[1].append(4) >>

String 类的实现(2)深度拷贝详解

我们已经知道了浅拷贝存在的问题,即多次析构同一空间.这个问题是类的成员函数引起的,就是前面浅拷贝里相当于编译器自动合成的函数,确切的说,浅拷贝里的问题是由隐士拷贝构造函数和隐士赋值运算符引起的. 拷贝构造函数用于将一个对象拷贝到新创建的对象中.也就是说,他用于初始化过程中,最常见的是将新对象显式地初始化为现有的对象.每当程序生成了副本对象时,编译器也将使用拷贝构造函数.默认的拷贝构造函数逐个的拷贝非静态成员(即浅拷贝),拷贝的是成员的值.(由于按值传递对象将调用拷贝构造函数,因此应该按引用传递对

JAVA对象的深度克隆

有时候,我们需要把对象A的所有值复制给对象B(B = A),但是这样用等号给赋值你会发现,当B中的某个对象值改变时,同时也会修改到A中相应对象的值! 也许你会说,用clone()不就行了?!你的想法只对了一半,因为用clone()时,除了基础数据和String类型的不受影响外,其他复杂类型(如集合.对象等)还是会受到影响的!除非你对每个对象里的复杂类型又进行了clone(),但是如果一个对象的层次非常深,那么clone()起来非常复杂,还有可能出现遗漏! 既然用等号和clone()复制对象都会对

【转】Java如何克隆集合——深度拷贝ArrayList和HashSet

原文网址:http://blog.csdn.net/cool_sti/article/details/21658521 原英文链接:http://javarevisited.blogspot.hk/2014/03/how-to-clone-collection-in-java-deep-copy-vs-shallow.html 程序员通常会误用集合类(如List.Set.ArrayList.HashSet)所提供的拷贝构造函数或其它方法来完成集合的拷贝.值得记住的一点是,Java中集合提供的拷贝

Python 直接赋值、浅拷贝和深度拷贝全解析

直接赋值:其实就是对象的引用(别名). 浅拷贝(copy):拷贝父对象,不会拷贝对象的内部的子对象. 深拷贝(deepcopy): copy 模块的 deepcopy 方法,完全拷贝了父对象及其子对象. 字典浅拷贝实例 实例 1 2 3 4 5 6 7 >>>a = {1: [1,2,3]} >>> b = a.copy() >>> a, b ({1: [1, 2, 3]}, {1: [1, 2, 3]}) >>> a[1].appe

js 深度拷贝

js 数据类型 分为2种: 基本数据类型:Undefined.Null.Boolean.Number.String 复杂数据类型:Object.Array.function 他们的区别是在内存中的存储方式: 简单数据类型:在栈内直接存储值 复杂数据类型:在栈内存储引用 1. 在简单类型赋值的时候是赋的值, 如下 a 的值是不会被修改的 var a = 1; var b = a; b = 2; console.log(a);//1 2. 复杂类型赋值的时候是赋的地址值,如下a对象下的a属性值会变成