1. 程式人生 > >記《learning hard C#學習筆記》 書中一個錯誤

記《learning hard C#學習筆記》 書中一個錯誤

以前學過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比較合適