在熟悉一個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 唷!
}
留言列表