发展历程 什么是深拷贝? -技术百科的定义

什么是深拷贝? -技术百科的定义

目录:

Anonim

定义-Deep Copy是什么意思?

深层复制在C#中是指一种技术,通过该技术可以创建对象的副本,使其包含实例成员和引用成员指向的对象的副本。


深层复制旨在将对象的所有元素复制到包含数据而不是包含对象的内存位置的对象的所有元素,这些元素包括直接引用的元素(值类型)和引用类型的间接引用元素,该元素将引用(指针)保存在内存位置。数据本身。 在创建新副本(克隆)而不引用原始数据的情况下,使用深层副本。

技术百科解释了深层复制

深层复制与浅层复制的不同之处在于复制对象的引用类型成员的方式。 在两种情况下都复制值类型的字段成员时,将对字段进行逐位复制。 在复制引用类型的字段时,浅表复制仅包含复制参考,而在深层复制中,将执行引用对象的新副本。


通过考虑一个具有AddressInfo作为引用类型的成员的Employee对象以及其他值类型的成员,可以通过示例说明深层复制。 Employee的深层副本将创建一个新对象Employee2,其成员的值类型等于Employee,但引用一个新对象AddressInfo2,该对象是AddressInfo的副本。


可以使用以下任何一种方法来实现深度复制:

  • 可以使用必要的逻辑来实现该类的复制构造函数,以复制值和引用(在适当的内存分配之后)类型的成员。 这种方法很繁琐且容易出错。
  • System.Object.MemberwiseClone方法可用于复制值类型的非静态成员。 可以创建引用类型的对象副本,并为其分配与原始对象相同的一组值
  • 可以将需要深度复制的对象序列化,并通过还原将其反序列化为新对象。 此方法是自动化的,不需要更改代码即可更改对象成员,但比其他方法慢,并且需要克隆的对象可序列化
  • 递归反射可用于获取浅表副本,此时可以添加深表副本所需的附加代码。 此方法是自动的,不需要为对象中任何字段的添加或删除而更改代码。 它比较慢,在部分信任环境中是不允许的
  • 可以使用中级语言代码,速度更快,但导致代码可读性较低且难以维护

要实现深层复制:

  • 对象必须定义明确,不能任意
  • 对象的属性将不被考虑
  • 对于特殊情况(例如,包含非托管引用的对象),必须通过智能自动进行克隆
什么是深拷贝? -技术百科的定义