當(dāng)前位置:首頁 > IT技術(shù) > Windows編程 > 正文

記《learning hard C#學(xué)習(xí)筆記》 書中一個(gè)錯(cuò)誤
2021-08-08 12:11:03

以前學(xué)過c# 但是不夠系統(tǒng)

最近讀了一本《learning hard C#學(xué)習(xí)筆記》 系統(tǒng)的學(xué)習(xí)一下

讀到50頁 發(fā)現(xiàn)一個(gè)問題,這本書用的單例有問題?記《learning hard C#學(xué)習(xí)筆記》 書中一個(gè)錯(cuò)誤_構(gòu)造方法

?

主要問題:

1 首先public static Person person 這里的public 就有問題 ?單例里面 這里應(yīng)該是private

2 在GetInstance方法里面 ?person = new Person() 這句不對

這樣每次調(diào)用GetInstance方法都會new一個(gè)Person對象出來

就不是單例

線程完全問題等暫且不談。

?

兩次通過GetInstance()方法獲取 Person實(shí)例。

發(fā)現(xiàn) 私有構(gòu)造器方法被調(diào)用兩次且

用==去判斷發(fā)現(xiàn),兩次獲取的Person實(shí)例并不相同。

因此不是單例。

?

記《learning hard C#學(xué)習(xí)筆記》 書中一個(gè)錯(cuò)誤_構(gòu)造方法_02

對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;
        }

    }


運(yùn)行:

?

?

    class Program
    {
        static void Main(string[] args)
        {
            Person person1 = Person.getInstance();
            Person person2 = Person.getInstance();

            Console.WriteLine("單例是否有效:{0}", person1 == person2);
            Console.WriteLine("類實(shí)例的name屬性為:{0}",person1.Name);
            Console.Read();
        }
    }

?

?

?

運(yùn)行結(jié)果:
記《learning hard C#學(xué)習(xí)筆記》 書中一個(gè)錯(cuò)誤_c#_03

?

其次?個(gè)人建議方法名用小駝峰命名法

獲取實(shí)例的方法名用getInstance比較合適

?

本文摘自 :https://blog.51cto.com/u

開通會員,享受整站包年服務(wù)立即開通 >