亚洲精品亚洲人成在线观看麻豆,在线欧美视频一区,亚洲国产精品一区二区动图,色综合久久丁香婷婷

              當前位置:首頁 > IT技術 > Windows編程 > 正文

              記《learning hard C#學習筆記》 書中一個錯誤
              2021-08-08 12:11:03

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

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

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

              ?

              主要問題:

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

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

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

              就不是單例

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

              ?

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

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

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

              因此不是單例。

              ?

              記《learning hard C#學習筆記》 書中一個錯誤_構(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;
                      }
              
                  }


              運行:

              ?

              ?

                  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é)果:
              記《learning hard C#學習筆記》 書中一個錯誤_c#_03

              ?

              其次?個人建議方法名用小駝峰命名法

              獲取實例的方法名用getInstance比較合適

              ?

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

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