位置:首页 > 软件操作教程 > 编程开发 > C# > 问题详情

C# 浅度和深度复制

提问人:刘团圆发布时间:2020-12-07

    从一个变量到另一个变量按值复制对象,而不是按引用复制对象(即以与结构相同的方式复制)可能非常复杂。因为一个对象可能包含许多其他对象的引用,例如字段成员等,这将涉及许多繁杂的处理。把每个成员从一个对象复制到另一个对象中可能不会成功,因为其中一些成员可能是引用类型。

    .NET Framework考虑了这个问题。简单地按照成员复制对象可以通过派生于System.Object的 MemberwiseClone()方法来完成,这是一个受保护的方法,但很容易在对象上定义一个调用该方法的公共方法。这个方法提供的复制功能称为浅度复制(shallow copy),因为它并未考虑引用类型成员。因此,新对象中的引用成员就会指向源对象中相同成员引用的对象,在许多情况下这并不理想。如果要创建成员的新实例(复制值,而不复制引用), 此时需要使用深度复制(deep copy).

    可以实现一个ICloneable接口,以标准方式进行深度复制。如果使用这个接口,就必须实现它包含的Clone()方法。这个方法返回一个类型为SysteiaObject的值。我们可以采用各种处理方式,实现所选的任何一个方法体来得到 这个对象。如果愿意,就可以进行深度复制(但不是必须执行深度复制,所以如果执行浅度复制更合适,就可以执行浅度复制)。对于该方法应该返回什么,并不存在规则或限制,所以很多人建议不要使用它。这些人建议实现自己的深度复制方法。

继续查找其他问题的答案?

相关视频回答
回复(0)
返回顶部