深度拷贝指的是将一个引用类型(包含该类型里的引用类型)拷贝一份(在内存中完完全全是两个对象,没有任何引用关系)..........  直接上代码:

     /// <summary>
/// 对象的深度拷贝(序列化的方式)
/// </summary>
public static class MyDeepCopy
{ /// <summary>
/// xml序列化的方式实现深拷贝
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="t"></param>
/// <returns></returns>
public static T XmlDeepCopy<T>(T t)
{
//创建Xml序列化对象
XmlSerializer xml = new XmlSerializer(typeof(T));
using (MemoryStream ms = new MemoryStream())//创建内存流
{
//将对象序列化到内存中
xml.Serialize(ms, t);
ms.Position = default;//将内存流的位置设为0
return (T)xml.Deserialize(ms);//继续反序列化
}
} /// <summary>
/// 二进制序列化的方式进行深拷贝
/// 确保需要拷贝的类里的所有成员已经标记为 [Serializable] 如果没有加该特性特报错
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="t"></param>
/// <returns></returns>
public static T BinaryDeepCopy<T>(T t)
{
//创建二进制序列化对象
BinaryFormatter bf = new BinaryFormatter();
using (MemoryStream ms = new MemoryStream())//创建内存流
{
//将对象序列化到内存中
bf.Serialize(ms, t);
ms.Position = default;//将内存流的位置设为0
return (T)bf.Deserialize(ms);//继续反序列化
}
}
}

浅拷贝指的是将该类型里面的值类型拷贝,而该类型里的引用类型不进行拷贝,实现浅拷贝很简单,再该类里编写一个方法,方法内部调用自身的MemberwiseClone()方法即可得到一个object类型的对象,将它强转成当前对象返回即可,列如:

     public class Person
{
public int ID { get; set; }
public string Name { get; set; }
public string Email { get; set; }
public Cat Cat { get; set; } /// <summary>
/// Person类的浅拷贝
/// </summary>
/// <returns></returns>
public Person QainClone()
{
//调用自带的浅拷贝方法得到的是一个objec类型的对象,然后强转直接返回就可以了
return MemberwiseClone() as Person;
}
}

string是个列外

C#中实现对象的深拷贝的更多相关文章

  1. js中json对象的深拷贝

    /** * 对象深拷贝 * @param obj */ function deepCopy(obj) { var txt=JSON.stringify(obj); return JSON.parse( ...

  2. JS中有关对象的继承以及实例化、浅拷贝深拷贝的奥秘

    一.属性的归属问题 JS对象中定义的属性和方法如果不是挂在原型链上的方法和属性(直接通过如类似x的方式进行定义)都只是在该对象上,对原型链上的没有影响.对于所有实例共用的方法可直接定义在原型链上这样实 ...

  3. JS中如何进行对象的深拷贝

    在JS中,一般的=号传递的都是对象/数组的引用,并没有真正地拷贝一个对象,那如何进行对象的深度拷贝呢?如果你对此也有疑问,这篇文章或许能够帮助到你 一.对象引用.浅层拷贝与深层拷贝的区别 js的对象引 ...

  4. PHP中对象的深拷贝与浅拷贝

    先说一下深拷贝和浅拷贝通俗理解 深拷贝:赋值时值完全复制,完全的copy,对其中一个作出改变,不会影响另一个 浅拷贝:赋值时,引用赋值,相当于取了一个别名.对其中一个修改,会影响另一个 PHP中, = ...

  5. 利用html5中json的方法做对象的深拷贝解决引用的相互干扰

    var a=[name:'zs']; var str=Json.stringify(a); var b=Json.parse(str);//这里是将一个新对象赋值给b.与a没有引用同一个对象 b.na ...

  6. 谈谈java中对象的深拷贝与浅拷贝

    知识点:java中关于Object.clone方法,对象的深拷贝与浅拷贝 引言: 在一些场景中,我们需要获取到一个对象的拷贝,这时候就可以用java中的Object.clone方法进行对象的复制,得到 ...

  7. 探究JS中对象的深拷贝和浅拷贝

    深拷贝和浅拷贝的区别 在讲深拷贝和浅拷贝的区别之前,回想一下我们平时拷贝一个对象时是怎么操作的?是不是像这样? var testObj1 = {a: 1, b:2}, testObj2=testObj ...

  8. js中的浅拷贝和深拷贝

    说说最近所学:浅拷贝和深拷贝也叫做浅克隆和深克隆,深浅主要针对的是对象的"深度",常见的对象都是"浅"的,也就是对象里的属性就是单个的属性,而"深&q ...

  9. C#对象的深拷贝与浅拷贝

    转载自:http://blog.163.com/hr_msn/blog/static/21549405120132250396584/ 深拷贝是指源对象与拷贝对象互相独立,其中任何一个对象的改动都不会 ...

随机推荐

  1. 安装face_recognition

    Ubuntu安装face_recognition需要先安装dlib 1.安装dlib的依赖 sudo apt-get install build-essential cmake sudo apt-ge ...

  2. FoxPro 游标指针操作

    查询上一记录skip -1 *相对定位 指针向上移动一条记录if bof() *测试当前记录指针是否超出第一条记录  go top *绝对定位表的第一条记录endifthisform.refresh ...

  3. 2013年最后的收成:avalon1.0正式发布

    大半年前我就说过,MVVM是前端究极的解决方案,因此之后我大多数时间都在折腾avalon,成立了专门的QQ群与感兴趣的一起讨论.感谢第一批吃螃蟹的人,avalon发展得很快,GITHUB上的贡献人数达 ...

  4. 对一个 复杂的json结果进行取值的例子

    1 JSON结果集 [ { "J_LP_OPERATE_MAIN": { "ID": "1900036295", "FILL_MA ...

  5. 如何阅读jdk及开源框架的源码?

    1.熟悉设计模式 可以边读源码 ,边熟悉设计模式,理解编程思想. jdk中对应的设计模式见:http://blog.csdn.net/gtuu0123/article/details/6114197 ...

  6. ROS 消息发布器和订阅器Publisher, Subscriber

    博客参考:https://www.2cto.com/kf/201705/639776.html 1.编写发布器节点节点(Node) 是指 ROS 网络中可执行文件.接下来,将会创建一个发布器节点(“t ...

  7. 前端基础之:JQuery

  8. 分布式java应用基础与实践

      始读于2014年4月30日,完成于2014年6月6日15:43:39. 阿里巴巴高级研究员林昊早年的书了,这些理论放到今天估计工作一两年的人都耳熟能详了,我个人很早以前就知道此书一直没有找到资源, ...

  9. http://4526621.blog.51cto.com/4516621/1343369

    http://4526621.blog.51cto.com/4516621/1343369

  10. Spring MVC的handlermapping之请求分发如何找到正确的Handler(BeanNameUrlHandlerMapping,SimpleUrlHandlerMapping)

    本文讲的是Spring MVC如何找到正确的handler, 前面请求具体怎么进入到下面的方法,不再细说. 大概就是Spring mvc通过servlet拦截请求,实现doService方法,然后进入 ...