浅拷贝和深拷贝之间的区别:
浅拷贝是指将对象中的数值类型的字段拷贝到新的对象中,而对象中的援用型字段则指复制它的一个援用到目的对象。假如改动目的对象中援用型字段的值他将反映在原始对象中,也就是说原始对象中对应的字段也会发作变化。
深拷贝与浅拷贝不同的是关于援用的处置,深拷贝将会在新对象中创立一个新的和原始对象中对应字段相同(内容相同)的字段,也就是说这个援用和原始对象的援用是不同的,我们在改动新对象中的这个字段的时分是不会影响到原始对象中对应字段的内容。
所以关于原型形式(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();
}
复制代码
1、IT大王遵守相关法律法规,由于本站资源全部来源于网络程序/投稿,故资源量太大无法一一准确核实资源侵权的真实性;
2、出于传递信息之目的,故IT大王可能会误刊发损害或影响您的合法权益,请您积极与我们联系处理(所有内容不代表本站观点与立场);
3、因时间、精力有限,我们无法一一核实每一条消息的真实性,但我们会在发布之前尽最大努力来核实这些信息;
4、无论出于何种目的要求本站删除内容,您均需要提供根据国家版权局发布的示范格式
《要求删除或断开链接侵权网络内容的通知》:https://itdw.cn/ziliao/sfgs.pdf,
国家知识产权局《要求删除或断开链接侵权网络内容的通知》填写说明: http://www.ncac.gov.cn/chinacopyright/contents/12227/342400.shtml
未按照国家知识产权局格式通知一律不予处理;请按照此通知格式填写发至本站的邮箱 wl6@163.com