扩展阅读
  • Python namedtuple对象json序列化/反序列化及对象恢复
  • jquery对象和javascript对象即DOM对象相互转换
  • c++类对象数组初始化方式
  • 请问如何把StringBuffer 的对象转化成一个InputStream 的对象,或者InputStream 子类的对象也可以!
  • php中检测变量是否是一个对象的is_object函数介绍及用法举例
  • 判断一个对象是否为jquery对象的方法
  • c++类对象初始化方式
  • Glib对象系统(也称为"GObject")内部是如何实现面向对象特征的呢?
  • java tomcat实现Session对象的持久化原理及配置方法介绍
  • 用RMI进行远程对象调用的时候,可不可以实现多个调用远程对象的并发操作
  • 将ResultSet结果集中的记录映射到Map对象中
  • 你们看是不是可以这样理解:在用来进行两个对象的比较时,==操作符用来比较两个对象的引用地址,而equals()用来比较两个对象的值。
  • php 5.5.14数据对象(PDO)介绍及PDO的预定义常量介绍
  • 请问:能不能动态的运行时生成对象(动态定义对象), 要涉及到哪些技术, 反射,序列化...??
  • 重新编译PLSQL中的无效对象或者指定的对象 的方法
  • jquey笔记之dom对象与jquery对象互换的例子
  • 有人问我:何为面向对象编程?我给不出确切或形象的说法。谢!vb、pb等开发工具是不是面向对象编程的语言。
  • 写一个方法,向它传递一个对象,循环打印出对象层次结构中的所有类?thinking in java里面的一个习题不知道如何做请教高手?
  • “当某个实例不再被任何对象引用时就会被垃圾回收机制回收”,那么怎样才算是不被任何对象引用呢?
  • 我的APPLET在Jbuilder5中,可以调用EJB对象,但是移植到网页上却不能调用EJB对象!是何缘故,值得研究!
  • 各位高手知道在JAVA中如何用一个名称创建一个对象实例,并调用其方法,注意:在编写代码时并不知要创建的对象的类名,也并不知方法名
  •  
    当前位置:  编程语言>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号