以前學(xué)過c# 但是不夠系統(tǒng)
最近讀了一本《learning hard C#學(xué)習(xí)筆記》 系統(tǒng)的學(xué)習(xí)一下
讀到50頁 發(fā)現(xiàn)一個問題,這本書用的單例有問題?
?
主要問題:
1 首先public static Person person 這里的public 就有問題 ?單例里面 這里應(yīng)該是private
2 在GetInstance方法里面 ?person = new Person() 這句不對
這樣每次調(diào)用GetInstance方法都會new一個Person對象出來
就不是單例
線程完全問題等暫且不談。
?
兩次通過GetInstance()方法獲取 Person實例。
發(fā)現(xiàn) 私有構(gòu)造器方法被調(diào)用兩次且
用==去判斷發(fā)現(xiàn),兩次獲取的Person實例并不相同。
因此不是單例。
?
對Person類作如下改動:
?
class Person { private string name; private static Person person; public string Name { get { return name; } } private Person() { Console.WriteLine("私有構(gòu)造方法被調(diào)用"); 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(); } }
?
?
?
運行結(jié)果:
?
其次?個人建議方法名用小駝峰命名法
獲取實例的方法名用getInstance比較合適
?
本文摘自 :https://blog.51cto.com/u