169it -->


 
当前位置:  编程语言>c#/asp.net

c#对象中两种copy操作:深拷贝(Deep Copy)与浅拷贝(Shallow Copy)

 
分享到:
    发布时间:2014-1-12  


    深拷贝与浅拷贝浅拷贝:只复制对象的基本类型,对象类型,仍属于原来的引用深拷贝:不仅复制对象的基本类,同时也复制原来对象中的对象C#中有两种类型变量,一种是值类型变量,一种是引用类型便利那个,对于值类型便...

深拷贝与浅拷贝

浅拷贝:只复制对象的基本类型,对象类型,仍属于原来的引用

深拷贝:不仅复制对象的基本类,同时也复制原来对象中的对象

C#中有两种类型变量,一种是值类型变量,一种是引用类型便利那个,对于值类型便利那个,深拷贝和浅拷贝都是通过复制操作实现的,其效果是一样的,将对象中的值类型的字段拷贝到新的对象中。这个很容易理解。本文重点讨论引用类型变量的拷贝机制和实现。

C#中引用类型对象的Copy操作有两种

为是上面说到的俩种。

浅拷贝和深拷贝的区别:

浅拷贝是指将对象中的数值类型的字段拷贝到新的对象中,而对象中的引用字段则指复制它的一个额饮用到目标对象

注意: string类型有点特殊,对于浅拷贝,按类值类型对象进行处理。

浅拷贝的实现

1 使用Ojbect类MemberwiseClone实现

MemberwiseClone:创建当前Object的浅拷贝副本

MemberwiseClone方法创建一个浅表副本,方式是创建一个新对象,然后将当前对象的非静态字段复制到该新对象。如果字段是值类型的,则对该字段执行逐位复制,如果该字段是引用类型,则复制引用但不复制引用的对象;因此,原始对象及其副本引用同一个对象。

示例代码:


public class Person  
{      
public int Age { get; set; }      
 public string Address { get; set; }      
public Name Name { get; set; }      
public object Clone()      
{           return   this.MemberwiseClone();            }            }  
public class Name  
{      
public Name(string frisName,string lastName)      
{            FristName = frisName;          
 LastName = lastName;        }      
 public string FristName { get; set; }      
 public string LastName { get; set; }  
}

2 复制操作与使用Object类MemberwiseClone实现

对于引用类型的变量,我们有种误解,认为复制操作就是一种浅拷贝,其实是有区别的。

1浅拷贝对于引用类型对象中的值类型字段进行了逐位复制。赋值运算符只是把源对象的引用赋值给目的对象,两者引用同一个对象。

2浅拷贝后的对象的值类型字段更改不会反映到源对象,而赋值运算后的对象类型字段更改会反映到源对象。


深拷贝的实现


相对于浅拷贝是指依照源对象为原型,创建一个新对象,将当前对象的所有字段进行执行逐位复制并支持递归,不管是值类型还是引用类型,不管是静态字段还是非静态字段。

本类别最新文章推荐:


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2017,169IT.COM,E-mail:www_169it_com#163.com(请将#改为@)

浙ICP备11055608号


-->