参考有关使用扩展方法为类创建深层复制方法的堆栈溢出讨论,该方法不需要[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
我是否需要为所有被引用的类提供扩展方法,我假设情况就是这样。
答案 0 :(得分:5)
如您所述,单例类根据定义不能包含多个实例。但是单例类没有C#构造,因此单例类的实现已经是一种解决方法。
即使您的班级只有私人构造函数,您也可以使用BinaryFormatter
(感谢Gusdor)或使用反射创建深层副本1。
在我看来,一个类只是一个单例类因为你遵循它的行为,所以当你复制它时,它不再是一个单例类。