使用序列化C#打破单例

舒贾特·西迪基

这是我的单身人士。

public class Person
{
    private static Person _person = null;

    private Person()
    { }

    public string Name { get; }

    public static Person PersonObj
    {
        get
        {
            if (_person == null)
                _person = new Person();

            return _person;
        }
    }
}

现在,我可以通过序列化创建此类的两个实例。

static void Main(string[] args)
{
    Person p = Person.PersonObj;
    string sss = Newtonsoft.Json.JsonConvert.SerializeObject(p);
    Person p1 = JsonConvert.DeserializeObject<Person>(sss);    
    if (p != p1)
    {
           // insert here 
    }
} 

现在,在序列化之后,我有两个不同的对象。由于类是单例,它如何可以有两个不同的对象?

菲利普·H

单例是一种编程概念,而不是语言功能。完全有可能创建代码来创建类的实例,这些实例从理论上讲应仅由单例工厂创建。您甚至不需要使用序列化来实现该功能,只需使用即可Activator.CreateInstance()

考虑到您的类构造函数也不必被调用也可能会有所帮助;当然,如果调用new MyClass()可以,但是反序列化不必调用构造函数。序列化作为一个概念来存储并重新补充类实例的状态;因此,它不需要遵循其他类实例化概念,例如构造函数作用域或构造函数逻辑。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用单例设计模式进行序列化

来自分类Dev

使用C#的序列化异常

来自分类Dev

使用C#序列化JSON

来自分类Dev

使用C#序列化JSON

来自分类常见问题

Scala单例对象中值的Java序列化

来自分类Dev

单例类通过序列化支持

来自分类Dev

在Java中反序列化单例

来自分类Dev

Scala单例对象中值的Java序列化

来自分类Dev

在Java中反序列化单例

来自分类Dev

如何使用MongoDB C#序列化程序序列化值类型?

来自分类Dev

使用 C# 中的注释部分序列化和反序列化 XML

来自分类Dev

使用C#的条件JSON序列化

来自分类Dev

使用C#反序列化XML

来自分类Dev

使用属性C#反序列化XML数组

来自分类Dev

使用C#从JSON反序列化值列表

来自分类Dev

使用RESTSharp C#反序列化JSON

来自分类Dev

使用C#反序列化JSON数据

来自分类Dev

C#使用重复标签反序列化XML

来自分类Dev

使用C#反序列化JSON(多个对象)

来自分类Dev

使用C#进行复杂的JSON对象序列化

来自分类Dev

C#使用linq反转和序列化字典

来自分类Dev

使用C#的条件JSON反序列化

来自分类Dev

使用C#序列化对象的最佳实践/方法

来自分类Dev

如何使用C#反序列化JSON数据?

来自分类Dev

使用C#反序列化JSON

来自分类Dev

Json使用C#从Wikipedia API反序列化

来自分类Dev

XML使用属性反序列化C#数组

来自分类Dev

使用C#反序列化XML时出错

来自分类Dev

如何使用C#序列化JsonArray?