天天看点

记《learning hard C#学习笔记》 书中一个错误

最近读了一本《learning hard C#学习笔记》 系统的学习一下

读到50页 发现一个问题,这本书用的单例有问题 

记《learning hard C#学习笔记》 书中一个错误

主要问题:

1 首先public static Person person 这里的public 就有问题  单例里面 这里应该是private

2 在GetInstance方法里面  person = new Person() 这句不对

这样每次调用GetInstance方法都会new一个Person对象出来

就不是单例

线程完全问题等暂且不谈。

两次通过GetInstance()方法获取 Person实例。

发现 私有构造器方法被调用两次且

用==去判断发现,两次获取的Person实例并不相同。

因此不是单例。

记《learning hard C#学习笔记》 书中一个错误

对Person类作如下改动:

   class Person

   {

       private string name;

       private static Person person;

       public string Name

       {

           get { return name; }

       }

       private Person()

           Console.WriteLine("私有构造方法被调用");

           this.name = "learning hard";

       public static Person getInstance()

           if (person == null)

           {

               person = new Person();

           }

           return person;

   }

运行:

   class Program

       static void Main(string[] args)

           Person person1 = Person.getInstance();

           Person person2 = Person.getInstance();

           Console.WriteLine("单例是否有效:{0}", person1 == person2);

           Console.WriteLine("类实例的name属性为:{0}",person1.Name);

           Console.Read();

运行结果:

其次 个人建议方法名用小驼峰命名法

获取实例的方法名用getInstance比较合适

关于单例 参见:

http://blog.csdn.net/lovesomnus/article/details/23679505

————————————————

版权声明:本文为CSDN博主「明明如月学长」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:

https://blog.csdn.net/w605283073/article/details/51305359