【问题标题】:Is deep copy possible for a singleton class单例类是否可以进行深度复制
【发布时间】:2013-12-05 13:39:56
【问题描述】:

参考堆栈溢出讨论,涉及使用扩展方法为类创建深拷贝方法,不需要 [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

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

【问题讨论】:

    标签: c# .net deep-copy


    【解决方案1】:

    正如您所提到的,根据定义,单例类不能有多个实例。但是单例class没有C#构造,所以实现单例类已经是一种变通方法了。

    即使你的类只有一个私有构造函数,你也可以使用BinaryFormatter(感谢Gusdor)或者使用反射来创建一个深拷贝]1

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

    【讨论】:

    • 我完全同意。当您知道这是您的单身人士时,您不会尝试对其进行深度复制。当你知道它是别人的……嗯,有时诱惑很大。我不知道这是否是问题中提到的情况,但这是我可以想到的尝试这种事情的场景。
    • BinaryFormatter 非常好时,为什么还要使用反射来进行深层复制?
    • @Gusdor 你是对的,我的回答另有暗示。唯一的区别是BinaryFormatter 跳过了构造函数,这在这种情况下可能是一件好事。
    猜你喜欢
    • 2018-02-17
    • 2018-12-04
    • 2011-01-03
    • 1970-01-01
    • 1970-01-01
    • 2019-09-26
    • 2012-05-10
    • 1970-01-01
    • 2014-11-01
    相关资源
    最近更新 更多