志在指尖
用双手敲打未来

C#中的深拷贝与浅拷贝

浅拷贝和深拷贝之间的区别:
浅拷贝是指将对象中的数值类型的字段拷贝到新的对象中,而对象中的援用型字段则指复制它的一个援用到目的对象。假如改动目的对象中援用型字段的值他将反映在原始对象中,也就是说原始对象中对应的字段也会发作变化。
深拷贝与浅拷贝不同的是关于援用的处置,深拷贝将会在新对象中创立一个新的和原始对象中对应字段相同(内容相同)的字段,也就是说这个援用和原始对象的援用是不同的,我们在改动新对象中的这个字段的时分是不会影响到原始对象中对应字段的内容。C#
所以关于原型形式(prototypepattern)也有不同的两种处置办法:对象的浅拷贝和深拷贝
MemberwiseClone办法创立一个浅表副本,办法是创立一个新对象,然后将当前对象的非静态字段复制到该新对象。假如字段是值类型的,则对该字段执行逐位复制。假如字段是援用类型,则复制援用但不复制援用的对象;因而,原始对象及其复本援用同一对象。深拷贝,即完成ICloneable接口.ICloneable可用于深拷贝和浅拷贝。
.net提供了一个ICloneable接口,该接口下有一个Clone()办法,你能够完成它用来完成你本人的克隆方式,比方深克隆或是浅克隆,MemberwiseClone()是object类中的一个办法,用来完成类的浅克隆
下面是一个深拷贝与浅拷贝的Model,仅供参考
复制代码
[Serializable]
publicclassInvoiceDetailResponse:IDeepCopy,IShallowCopy
{
publicGuidmerchant_id{get;set;}
///
///称号
///
publicstringuname{get;set;}
///
///浅拷贝
///
///
publicobjectShallowCopy()
{
returnthis.MemberwiseClone();
}
///
///深拷贝
///
///
publicobjectDeepCopy()
{
using(MemoryStreamstream=newMemoryStream())
{
BinaryFormatterbFormatter=newBinaryFormatter();
bFormatter.Serialize(stream,this);
stream.Seek(0,SeekOrigin.Begin);
return(InvoiceDetailResponse)bFormatter.Deserialize(stream);
}
}
}
///
///深拷贝接口
///
interfaceIDeepCopy
{
objectDeepCopy();
}
///
///浅拷贝接口
///
interfaceIShallowCopy
{
objectShallowCopy();
}
复制代码

未经允许不得转载:IT技术网站 » C#中的深拷贝与浅拷贝
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!

 

志在指尖 用双手敲打未来

登录/注册IT技术大全

热门IT技术

C#基础入门   SQL server数据库   系统SEO学习教程   WordPress小技巧   WordPress插件   脚本与源码下载