類別的「成員」與「屬性」:
類別「成員」的存取是很直接的,不會另做任何的修飾。如2.(2)中的p1.age=20;這一行,就直接將20存入p1.age這個成員中。而age這個成員代表的是該person的年齡,不應為負數,故我們須防止p1.age=-10;這種不合理的情況發生。雖說若由程式設計者本身存取屬性,人腦能避免做出這種不合理的設定,但有時我們是由電腦去計算屬性的值,就難免有不合理的狀況。故在存取成員時,須對另作修飾。有做這種修飾的成員,我們稱呼他為「屬性」。
如前所述,類別成員宣告式的寫法為:
存取修飾詞 成員資料型態 成員名稱 = 值;
而類別屬性宣告式的寫法就是:
存取修飾詞 屬性資料型態 屬性名稱
{
get
{
//該屬性在被讀取時的修飾
return 變數名稱;
}
set
{
//該屬性在存取時的修飾
//需以關鍵字value來代表存入的值
}
}
※ 註:如果不寫set{}、只有寫get{},那該屬性就會是「惟讀的(read-only)」。如果不寫get{}、只有寫set{},那該屬性就會是「惟寫的(write-only)」。
※ 範例:如將2.(1)的person類別改成如下:
class person
{
public string name;
public int _age_;
public int age
{
get { return _age_; }
set {
if (value < 0) { _age_ = 0; }
else { _age_ = value; }
}
}
public person(string n_, int a_)
{ name = n_; age = a_; }
public string self_introduction()
{ return "hi, I'm " + name + "," + age + "years old."; }
};
person p1 = new person("weiwei", 18);
p1.age = -20;
textBox1.Text = p1.age.ToString()+" years old."; //顯示:0 years old.
說明一:就算p1.age = -20;,在呼叫p1.age時,其結果還是變成0。避免了歲數為負數的不合理情況。此法對建構式賦值亦管用。
說明二:在類別內部存取時,是存取_age_屬性。而在類別外部存取時,就是存取age成員。而_age_是筆者自訂的變數名,此變數名在字面上並不需要和age有任何的關係,取成_age_只是為了方便辨識而已。恐人誤會,特此提及。
留言列表