為什么要對字段封裝屬性? 每次有新人來,都要問這個問題,我直接對字段操作多省事呀,就像這樣:
public
class A
{
public string _Name;
}
public Class B
{
private A _MyA;
public void DoB( string n)
{
_MyA._Name=n;
}
}
{
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;
}
}
{
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
