close

類別的成員屬性

類別成員」的存取是很直接的,不會另做任何的修飾。如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_只是為了方便辨識而已。恐人誤會,特此提及。

 

 

上一篇:類別物件的宣告與使用

下一篇:靜態成員與靜態成員函式

按此前往C#完整教學目錄

arrow
arrow

    埃伯 發表在 痞客邦 留言(0) 人氣()