爲什麼要對字段封裝屬性

 

  爲什麼要對字段封裝屬性? 每次有新人來,都要問這個問題,我直接對字段操作多省事呀,就像這樣
  public class A
  {
     public  string _Name;    
  }

   public Class B
   {
      private A _MyA;
      public void DoB(string n)
      {
         _MyA._Name=n;
      }
   }
   很多磚家會毫不猶豫的說,你這樣“封裝不好”,於是新人眨着兩隻無神而又水汪汪的大眼睛,分明是在說:“這不脫了褲子放X嗎”,心裏一肚子不服氣。

   但從編程角度說,封裝爲屬性除了從外面看起來“順眼”些,還有啥實際作用呢?

   牛人會巴拉巴拉講出一大套,我就說一點簡單而實用的,那就是是從調試角度看問題。
  
  在調試中,我們經常爲使用斷點跟蹤的方式,檢查變量當時的數值,如果按照上面寫的方式,很多地方都可能會出現對_Name賦值的情況,如果我發現_Name被設置了非法的數據,而想知道在何地被賦值的時候,上面的寫法就很麻煩,只能先找到所有調用過_Name的地方(如果是C++的開發環境,找起來更麻煩),然後一個一個的篩。

   如果我們把代碼寫成這樣:
    public class A
  {
     private  string _Name;    
     public string Name
     {
       get{...};
       set{...};
     }
  }

   public Class B
   {
      private A _MyA;
      internal A MyA
      {
         get{...};
         set{...};
      }
      public void DoB(string n)
      {
         MyA.Name=n;
      }
   }
    調試的時候,只需要在Name.set的位置加斷點,可以很快定位錯誤。
   
    當然,一個好的習慣是對class內部的字段也儘量使用屬性處理,就像class B中對 MyA的處理一樣。就可以很容易的進行斷點調試了。

發佈了34 篇原創文章 · 獲贊 8 · 訪問量 9萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章