单个类是否可以进行深层复制

时间:2013-11-21 07:31:55

标签: c# .net deep-copy

参考有关使用扩展方法为类创建深层复制方法的堆栈溢出讨论,该方法不需要[Serializable]属性:

How do you do a deep copy of an object in .NET (C# specifically)?

我所拥有的类是一个单例类,它是一个旧的实现:

  • 我是否可以创建相同的深层副本,我理解这是不可能的,但试图理解,如果在这种典型场景中有可能的解决方法。我知道对我来说其他选择是将类更改为非单例,但在我们当前的设计和使用中,这将是很多工作,可能会导致许多问题。

  • 此外,当前类还有多个其他自定义类被引用,因此当我要进行深层复制时,尤其是Alex Burtsev在以下代码中的方式:

https://raw.github.com/Burtsev-Alexey/net-object-deep-copy/master/ObjectExtensions.cs

我是否需要为所有被引用的类提供扩展方法,我假设情况就是这样。

1 个答案:

答案 0 :(得分:5)

如您所述,单例类根据定义不能包含多个实例。但是单例没有C#构造,因此单例类的实现已经是一种解决方法。

即使您的班级只有私人构造函数,您也可以使用BinaryFormatter(感谢Gusdor)或使用反射创建深层副本1

在我看来,一个类只是一个单例类因为你遵循它的行为,所以当你复制它时,它不再是一个单例类。