連續兩天被問(wèn)到這個(gè)問(wèn)題,發(fā)現初學(xué)者從wrox的入門(mén)經(jīng)典紅寶書(shū)中很難找到正確的答案。
通過(guò)這兩天的回答我總結出一個(gè)通過(guò)講解和例子來(lái)從初學(xué)者的眼光出發(fā)解釋的方法。
(以C#語(yǔ)言下字符串類(lèi)型為例)
在這里就不多說(shuō)字段變量了,簡(jiǎn)單提一句,字段變量就是對象公布出來(lái)和外界交互數據的變量。
屬性是對一個(gè)或多個(gè)變量的包裝,在Java環(huán)境中,屬性是通過(guò)從對象中暴露出來(lái)的Set方法和Get來(lái)實(shí)現的:
public boolean SetPublicString(string val){this.mPublicString = val;}
public string GetPublicString(){return this.mPublicString;} 而在DotNet當中,總結了以上的Set和Get方法,直接將其定義成了一個(gè)暴露屬性,通過(guò)對這個(gè)屬性的訪(fǎng)問(wèn)方式不同(取值還是賦值)而采用不同的代碼如以下所示的get代碼段和set代碼段
變量的定義
public string mPublicString; 屬性的定義
public string PublicString{
get{return this.mPublicString;}
set{this.mPublicString = value;}
} 因為可以做到使用不同的代碼段,所以在訪(fǎng)問(wèn)的時(shí)候可以使用更多的邏輯控制來(lái)取到或限制需要的值:
public string PublicString{
get{
if(this.mPublicString.Length>10){
return this.mPublicString;
}
else{
return "";
}
}
set{
this.mPublicString = value;
}
} 以上代碼的意思是如果訪(fǎng)問(wèn)PublicString時(shí)就去查看mPublicString的長(cháng)度,如果大于10就返回否則就返回空字符串。
綜上就把字段變量mPublicString包裝了起來(lái),并不是直接的面向對象的使用者,達到控制的目的。
屬性的方法中還能寫(xiě)各種復雜的邏輯,因為屬性中set或get的代碼塊等同于SetPublicString和GetPublicString的方法。
希望以上的內容能對你有所幫助,希望能知道你對于這個(gè)問(wèn)題更精確,更簡(jiǎn)單明了的解釋方法。