这是我的单身人士。
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
}
}
现在,在序列化之后,我有两个不同的对象。由于类是单例,它如何可以有两个不同的对象?
单例是一种编程概念,而不是语言功能。完全有可能创建代码来创建类的实例,这些实例从理论上讲应仅由单例工厂创建。您甚至不需要使用序列化来实现该功能,只需使用即可Activator.CreateInstance()
。
考虑到您的类构造函数也不必被调用也可能会有所帮助;当然,如果调用new MyClass()
可以,但是反序列化不必调用构造函数。序列化作为一个概念来存储并重新补充类实例的状态;因此,它不需要遵循其他类实例化概念,例如构造函数作用域或构造函数逻辑。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句