記《learning hard C#學習筆記》 書中一個錯誤
阿新 • • 發佈:2019-01-23
以前學過c# 但是不夠系統
最近讀了一本《learning hard C#學習筆記》 系統的學習一下
讀到50頁 發現一個問題,這本書用的單例有問題
主要問題:
1 首先public static Person person 這裡的public 就有問題 單例裡面 這裡應該是private
2 在GetInstance方法裡面 person = new Person() 這句不對
這樣每次呼叫GetInstance方法都會new一個Person物件出來
就不是單例
執行緒完全問題等暫且不談。
兩次通過GetInstance()方法獲取 Person例項。
發現 私有構造器方法被呼叫兩次且
用==去判斷髮現,兩次獲取的Person例項並不相同。
因此不是單例。
對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比較合適