上海市城乡建设管理局网站,佛山房地产网站建设,六安做网站的公司,塘厦企业网站推广公司深度拷贝指的是将一个引用类型#xff08;包含该类型里的引用类型#xff09;拷贝一份(在内存中完完全全是两个对象#xff0c;没有任何引用关系).......... 直接上代码#xff1a; 1 /// summary2 /// 对象的深度拷贝#xff08;序列化的方式#xf…深度拷贝指的是将一个引用类型包含该类型里的引用类型拷贝一份(在内存中完完全全是两个对象没有任何引用关系).......... 直接上代码 1 /// summary2 /// 对象的深度拷贝序列化的方式3 /// /summary4 public static class MyDeepCopy5 {6 7 /// summary8 /// xml序列化的方式实现深拷贝9 /// /summary
10 /// typeparam nameT/typeparam
11 /// param namet/param
12 /// returns/returns
13 public static T XmlDeepCopyT(T t)
14 {
15 //创建Xml序列化对象
16 XmlSerializer xml new XmlSerializer(typeof(T));
17 using (MemoryStream ms new MemoryStream())//创建内存流
18 {
19 //将对象序列化到内存中
20 xml.Serialize(ms, t);
21 ms.Position default;//将内存流的位置设为0
22 return (T)xml.Deserialize(ms);//继续反序列化
23 }
24 }
25
26 /// summary
27 /// 二进制序列化的方式进行深拷贝
28 /// 确保需要拷贝的类里的所有成员已经标记为 [Serializable] 如果没有加该特性特报错
29 /// /summary
30 /// typeparam nameT/typeparam
31 /// param namet/param
32 /// returns/returns
33 public static T BinaryDeepCopyT(T t)
34 {
35 //创建二进制序列化对象
36 BinaryFormatter bf new BinaryFormatter();
37 using (MemoryStream ms new MemoryStream())//创建内存流
38 {
39 //将对象序列化到内存中
40 bf.Serialize(ms, t);
41 ms.Position default;//将内存流的位置设为0
42 return (T)bf.Deserialize(ms);//继续反序列化
43 }
44 }
45 } View Code 浅拷贝指的是将该类型里面的值类型拷贝而该类型里的引用类型不进行拷贝实现浅拷贝很简单再该类里编写一个方法方法内部调用自身的MemberwiseClone()方法即可得到一个object类型的对象将它强转成当前对象返回即可列如 1 public class Person2 {3 public int ID { get; set; }4 public string Name { get; set; }5 public string Email { get; set; }6 public Cat Cat { get; set; }7 8 /// summary9 /// Person类的浅拷贝
10 /// /summary
11 /// returns/returns
12 public Person QainClone()
13 {
14 //调用自带的浅拷贝方法得到的是一个objec类型的对象然后强转直接返回就可以了
15 return MemberwiseClone() as Person;
16 }
17 } View Code string是个列外转载于:https://www.cnblogs.com/heheblog/p/net_study_20180716.html