作者StupidGaGa (笨嘎嘎)
看板C_Sharp
標題Re: [問題] 新手學C#,有關{get;set;}的疑問
時間Fri Dec 26 09:58:03 2014
提供一點我個人的實作經驗:
Field:供class內部使用;
Property:供class外部使用。
我舉個簡單的例子,我想你在寫網頁也常會遇到的問題,
時間轉換的問題。
public class Game
{
private DateTime GreenwichMeanTime = DateTime.UtcNow;
//public DateTime GreenwichMeanTime
//{
// get { return DateTime.UtcNow; }
// private set;
//}
public DateTime TaiwanTime
{
get { return this.GreenwichMeanTime.AddHours(8); }
set { this.GreenwichMeanTime = value.AddHours(-8); }
}
public DateTime JapanTime
{
get { return this.GreenwichMeanTime.AddHours(9); }
set { this.GreenwichMeanTime = value.AddHours(-9); }
}
public void Delay3Second()
{
this.GreenwichMeanTime = this.GreenwichMeanTime.AddSeconds(-3);
}
}
GMT是class內部在用的時間,
不管你是要加減乘除,還是要作任何運算,在class內部就是GMT。
當有其他client用時間的時候,
不管是選擇日本時間還是台灣時間,基本上都是GMT。
在JAVA早期,我要存取某個變數時,
為了要保持封裝的特性,就會另外寫GetTaiwanTime、SetTaiwanTime,
再抽像做成介面的時候,這些Get、Set會另外抽起來做成「屬性介面」,
而public method也會另外抽起來做成「方法介面」,
屬性介面+方法介面=class介面。
講那麼多,還是回到最上面的那兩句話,
Field:供class內部使用;
Property:供class外部使用。
人話一點就是
Property:金玉其外,其他class看到你的模樣。
Filed:敗絮其內,自己看到自己的模樣。
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 60.249.117.38
※ 文章網址: http://webptt.com/m.aspx?n=bbs/C_Sharp/M.1419559087.A.D6C.html
1F:→ AmosYang: 就「時區轉換」來說,還是別土法鍊鋼…參考一下 12/26 11:40
2F:→ AmosYang: TimeZoneInfo 及 DateTimeOffset 吧 12/26 11:40
是我表達有問題嗎?「舉例」的重點是在TimeZoneInfo?
我怎麼覺得我是在討論Field與Property。
個人對於用不用TimeZoneInfo沒什麼想法,
但是「時區轉換」用TimeZoneInfo就比較高尚嗎?
單純的用加減時數就比較老舊嗎?
我所學到的是,不管方法如何,要因時因地的用才是好方法,
用某某方法比較好的說法,我抱持懷疑。
3F:→ andymai: 一樓也只是好心說一下吧~而且問題不是在於什麼高不高尚 12/27 12:53
4F:→ andymai: 人家好心回答也沒帶情緒~卻換來這樣的回應~那還有誰想回? 12/27 12:54
我的回答也沒有情緒,
時區轉換用哪種方式不是討論重點,要討論時區轉換可以另PO文章討論。
我的問題都只是問題,
土法煉鋼就不是好方法?TimeZoneInfo就比較高尚?
這兩種我都會用,某篇說的日光節約我轉過、也知道,
但我還是很想問,
「什麼時候程式有高不高尚的寫法?」
Object-Oriented Programming 比 Procedural Programming 高尚?
Service-Oriented Programming 比 Object-Oriented Programming 高尚?
我還是認為因時因地的程式才是好程式。
這裡的舉例就只是個舉例,並不含其他因素,
如果要加入其他因素,那討論就會偏掉。
5F:→ andymai: 人家也只是好心提一下啊~"高不高尚"的論點是你自己提的~ 12/29 12:54
6F:→ andymai: 不是嗎?人家只是考量到別的使用情境~哪有說比較高尚?因時 12/29 12:58
7F:→ andymai: 因地的當然應該贏廣泛設計式的程式~畢竟都"客制化"了... 12/29 12:59
所以我說,果然接下來的推文就歪串了。
結果都不是在討論Field與屬性,哎…
當舉例參雜別的考量,你會去說舉例有誤?
那我覺得以後版上沒人敢貼code了。
如同有人問說如何在textBox換行,
某人回答 \r\n,後來有人很回說用 Environment.NewLine,
然後還說 \r\n 別土法煉鋼,建議用 Environment.NewLine比較好,
我很想問,有差嗎?
我只想說,
不能因為微軟都幫你處理好了就笨笨的去用那些封裝method,
結果變成只會用,但不知道為何的程式設計師,
有時候土法煉鋼也是能學到不少東西。
如果覺得這舉例不好,那過幾天後我看看情況自刪文章,
反正貼code還會被認為誤導,以後打嘴砲就好,
反正用說的比用實作舉例簡單多了。
※ 編輯: StupidGaGa (60.249.117.38), 12/31/2014 18:28:23
8F:→ andymai: 都說了人家只是好心提醒,偏偏要想那麼多... 12/31 23:05