对象复制是将数据对象的属性复制到同一数据类型的另一个对象的过程。在.Net浅拷贝和深拷贝是用于在对象之间复制数据的。下面本篇文章就来带大家简单认识一下.Net中浅拷贝和深拷贝,希望对大家有所帮助。

什么是浅拷贝?

浅拷贝会创建一个新对象,然后将当前对象的非静态字段复制到新对象。如果该字段是值类型,则执行该字段的逐位复制。如果该字段是引用类型,则复制唯一的引用,但不复制引用的对象本身;因此原始和克隆引用相同的对象。【视频教程推荐:ASP.NET教程】

对象的浅表副本是一个新对象,其实例变量与旧对象相同。在.Net浅拷贝是由对象方法MemberwiseClone()完成的。

如果你有一个带有值的对象,并且你想在同一类型的另一个变量中创建该对象的副本,那么你可以使用浅拷贝,所有属于值类型的属性值都将被复制,但如果你如果具有引用类型的属性,则不会复制此实例,而只会引用该实例。

什么是深拷贝?

深拷贝是创建一个新对象,然后将当前对象的字段复制到新创建的对象,以创建内部引用类型的完整副本的过程。如果字段是值类型,则执行字段的逐位复制。如果字段是引用类型,则执行引用对象的新副本。

对象的深层副本是具有全新实例变量的新对象,它不与旧对象共享对象。执行Deep Copy时,要克隆的类必须标记为[Serializable]。

深层复制旨在复制对象的所有元素,包括直接引用的值类型元素和引用类型的间接引用元素,引用类型包含对包含数据而不是包含数据本身的内存位置的引用。

更多相关文章

  1. 在C++中对象如何作为参数传递和返回?(代码示例)
  2. C#学习之面向对象如何调用类以及普通方法、静态方法的使用
  3. c++是面向对象还是面向过程?
  4. 逻辑运算符两侧运算对象的数据类型是什么?
  5. golang json怎么隐藏某个字段
  6. golang 是面向对象的么
  7. Golang 是面向对象还是面向过程?
  8. golang是面向对象吗?
  9. Golang中使用JSON时区分空字段和未设置字段的方法

随机推荐

  1. Android开发之Android Context,上下文(Act
  2. 安卓消息处理机制
  3. 向Android操作栏中添加操作项和浮动菜单
  4. W/System.err:at java.net.PlainDatagramS
  5. Android Activity 完全解析(下)
  6. Android新手入门2016(11)--非阻塞对话框Ale
  7. 如何把项目从github上导入到android stud
  8. android在onCreate()方法中获取View的宽
  9. 【Android 进阶】ButterKnife-黄油刀
  10. 对于Android的文件结构介绍