【轉】為什么要對字段封裝屬性


為什么要對字段封裝屬性? 每次有新人來,都要問這個問題,我直接對字段操作多省事呀,就像這樣:

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的處理一樣。就可以很容易的進行斷點調試了。

還有篇文章看看:http://blog.csdn.net/hamber_bao/article/details/6504621


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM