爲什麼要對字段封裝屬性? 每次有新人來,都要問這個問題,我直接對字段操作多省事呀,就像這樣
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的處理一樣。就可以很容易的進行斷點調試了。