runxinzhi.com
首页
百度搜索
C#中的MemberwiseClone和clone的区别
MemberwiseClone
方法创建一个浅表副本,具体来说就是创建一个新对象,然后将当前对象的非静态字段复制到该新对象。如果字段是值类型的,则对该字段执行逐位复制。如果字段是引用类型,则复制引用但不复制引用的对象;因此,原始对象及其复本引用同一对象。 为了实现深度复制,我们就必须遍历有相互引用的对象构成的图,并需要处理其中的循环引用结构。这无疑是十分复杂的。幸好借助.Net的序列化和反序列化机制,可以十分简单的深度Clone一个对象。原理很简单,首先将对象序列化到内存流中,此时对象和对象引用的所用对象的状态都被保存到内存中。.Net的序列化机制会自动处理循环引用的情况。然后将内存流中的状态信息反序列化到一个新的对象中。这样一个对象的深度复制就完成了。在原型设计模式中CLONE技术非常关键。 [code lang="csharp"] <pre>namespace CloneDemo { [Serializable] class DemoClass { public int i = 0; public int[] iArr = { 1, 2, 3 }; public DemoClass Clone1() //浅CLONE { return this.MemberwiseClone() as DemoClass; } public DemoClass Clone2() //深clone { MemoryStream stream = new MemoryStream(); BinaryFormatter formatter = new BinaryFormatter(); formatter.Serialize(stream, this); stream.Position = 0; return formatter.Deserialize(stream) as DemoClass; } } class Program { static void Main(string[] args) { DemoClass a = new DemoClass(); a.i = 10; a.iArr = new int[] { 8, 9, 10 }; DemoClass b = a.Clone1(); DemoClass c = a.Clone2(); // 更改 a 对象的iArr[0], 导致 b 对象的iArr[0] 也发生了变化 而 c不会变化 a.iArr[0] = 88; Console.WriteLine("MemberwiseClone"); Console.WriteLine(b.i); foreach (var item in b.iArr) { Console.WriteLine(item); } Console.WriteLine("Clone2"); Console.WriteLine(c.i); foreach (var item in c.iArr) { Console.WriteLine(item); } Console.ReadLine(); } } }</pre> [/code]
写个博客不容易,请转载的时候备注下原文出处,谢谢
作者:keepnode
博客地址:
http://www.cnblogs.com/woaic
每件事到最后都是好事,如果不是好事,说明还没有到最后
=========================
相关阅读:
去中心化共识
创建你的第一个去中心化应用(dapp)
务实的去中心化
什么是去中心化市场(OpenBazaar)
为什么要做去中心化市场(OpenBazaar)
区块链让物联网真正实现去中心化
去中心化市场OpenBazaar如何运转
如何安装去中心化市场(OpenBazaar)
android自定义View&自定义ViewGroup(上)
android自定义View&自定义ViewGroup(上)
原文地址:https://www.cnblogs.com/woaic/p/3942840.html
最新文章
MySQL DBA亲授MySQL InnoDB事务ACID实现原理
错过血亏!一文搞懂Oracle锁相关视图及相关操作
使用Xamarin开发即时通信系统 -- 基础篇(大量图文讲解 step by step,附源码下载)...
使用Xamarin开发即时通信系统 -- 基础篇(大量图文讲解 step by step,附源码下载)...
db2 锁表
db2 锁表
db2 锁表
db2 锁表
墨仓式进入2.0时代?爱普生商用墨仓式L4158试用
墨仓式进入2.0时代?爱普生商用墨仓式L4158试用
热门文章
墨仓式进入2.0时代?爱普生商用墨仓式L4158试用
墨仓式进入2.0时代?爱普生商用墨仓式L4158试用
WCF REST (一)
xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
去中心化带宽
去中心化资产的去中心化市场
Copyright © 2020-2023
润新知