close

在熟悉一個IDE的前幾件事情就是弄懂

怎麼快速建立 getter and setter !!

但是使用Visual Studio卻讓我佈及煩惱...

怎麼getter and setter長這樣?

 

這強烈衝擊java派的我的心....

class Student{

    public string name{get;set;}

    public int score{get;set;}

}

這到底是什麼 ??? 

讓我不禁又開始思考,

那我到底使用他幹嘛 ?? 直接取值不就好了──

這就要回顧為何要封裝(encapsulate)屬性(value)了

 

回到java 中 我們擅長寫成

class Student{

    private string name;

    private int score;

    public string getName(){

        return name;

    }

    public void setName(String name){

        this.name = name;

    }

..... ....

}

這個動作封裝了 name  跟 score 屬性 ...

使之不出現在公開介面之中,

但其實他的價值是在於 "changeability" 

如果你的介面是公開的

所有的程式都如此撰寫:

string name = myStudent.name;

myStudent.score = 50;

那之後 如果 在 get 或 set 中想新增程序 怎麼辦?

如果想要在設置分數的時候 驗證分數範圍  

那你將需要 "把每一道曾經讀寫屬性的程式碼都改寫 !!!"

 

因此 才需要把過程用getter setter 封裝起來  !!

(還有許多價值在此不論)

 

回到 C# !!

class Student{

    public string name{get;set;}

    public int score{get;set;}

}

這時候就要認證,這莫名其妙短到不行的寫法是否多餘!?

那就是證明它可以擴充功能!!

於是我發現了  上述寫法叫做 

Auto-Implemented Properties

編譯器會建造 在背景出現 私有的 屬性 供 讀取

未來要擴充時,只要稍微改寫一下就好了 (假如增加驗證分數手續)

 

class Student{

    private int _score;

    public string name{get;set;}

    public int score{

    get { return _score ;}

    set {  

         if ( isScoreOutOfRange(value) )

                throw new ScoreOutOfRangeException();

         _score = value;

    }

    }

}

 

值得注意的是 參數是 value 唷!

 

 

}

arrow
arrow
    文章標籤
    getter setter c#
    全站熱搜

    水球潘 發表在 痞客邦 留言(0) 人氣()