存取子(accessors) get & set

 

    存取子(accessors) get & set在程式設計中很常用到,可以用來對特定的數值做一些處理。其中get的意思相當於「提供」,而set的意思相當於「設定」。

    下面我寫一個程式,設定學生的成績,當學生的成績小於60分時自動加到60分,這時候就可以運用存取子(accessors) get & set,程式語法如下:

 

class Student

    {

        private int grade;

      

        public int Grade

        {

            get

            {

                return grade;

            }

            set

            {

                if (value < 60) { grade= 60; }

                else { grade=value; }

            }

        }       

    }

 

     class Program

    {

        static void Main(string[] args)

        {

            Student s = new Student();

            s.Grade = 50;

            Console.WriteLine(s.Grade);

        }    

    }

我設定學生成績為50,因為我在Grade這個變數裡面的set已經寫了

if (value < 60) { grade= 60; }

else { grade=value; }

這一段程式會讓學生成績<60的時候自動加到60分,所以這段程式的最後輸出結果會是60

 

 

如果拿掉set,只保留get,就變成了唯讀屬性。例如我再寫一個程式,這個程式計算學生的金錢為悠遊卡和現金。

 

    class Student

    {

        private int easycard=100;

        private int cash = 500;

        public int Money

        {

            get

            {

                return easycard + cash;

            }

        }

    }

 

    class Program

    {

        static void Main(string[] args)

        {

            Student s = new Student();

            s.Money = 100;   ※這一行會造成程式錯誤,因為只有寫get是唯讀屬性

            Console.WriteLine(s.Money);

 

        }    

    }

 

在上面的程式中,在處理變數Money時我只有寫get,沒有寫set,這時候我在主程式寫s.Money = 100;這一行在程式中就會出現錯誤,因為Money是唯讀屬性,不能夠設定,所以要把s.Money = 100;這一行刪除掉,然後才能執行程式,程式的執行結果easycard=100再加上cash=500就是600

 

使用get & set有甚麼好處?這是要對於存取private變數的特殊寫法,為了防止一些意外操作所以採取把變數設為private,然後利用get & set,若只有保留get時變成唯讀屬性。

 

 

這次 get & set的完整範例程式碼如下:

          class Student

    {

        private int grade;

      

        public int Grade

        {

            get

            {

                return grade;

            }

            set

            {

                if (value < 60) { grade= 60; }

                else { grade=value; }

            }

        }

 

        private int easycard=100;

        private int cash = 500;

        public int Money

        {

            get

            {

                return easycard + cash;

            }

        }

    }

 

    class Program

    {

        static void Main(string[] args)

        {

            Student s = new Student();

            s.Grade = 50;

            Console.WriteLine(s.Grade);          

            Console.WriteLine(s.Money);

        }    

    }

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 波羅、希夏普2020 的頭像
    波羅、希夏普2020

    希夏普2020的程式天地

    波羅、希夏普2020 發表在 痞客邦 留言(0) 人氣()