Re: [問題] 新手學C#,有關{get;set;}的疑問

看板C_Sharp (C#)作者 (笨嘎嘎)時間10年前 (2014/12/26 09:58), 10年前編輯推噓0(008)
留言8則, 2人參與, 最新討論串3/5 (看更多)
提供一點我個人的實作經驗: 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://www.ptt.cc/bbs/C_Sharp/M.1419559087.A.D6C.html

12/26 11:40, , 1F
就「時區轉換」來說,還是別土法鍊鋼…參考一下
12/26 11:40, 1F

12/26 11:40, , 2F
TimeZoneInfo 及 DateTimeOffset 吧
12/26 11:40, 2F
是我表達有問題嗎?「舉例」的重點是在TimeZoneInfo? 我怎麼覺得我是在討論Field與Property。 個人對於用不用TimeZoneInfo沒什麼想法, 但是「時區轉換」用TimeZoneInfo就比較高尚嗎? 單純的用加減時數就比較老舊嗎? 我所學到的是,不管方法如何,要因時因地的用才是好方法, 用某某方法比較好的說法,我抱持懷疑。

12/27 12:53, , 3F
一樓也只是好心說一下吧~而且問題不是在於什麼高不高尚
12/27 12:53, 3F

12/27 12:54, , 4F
人家好心回答也沒帶情緒~卻換來這樣的回應~那還有誰想回?
12/27 12:54, 4F
我的回答也沒有情緒, 時區轉換用哪種方式不是討論重點,要討論時區轉換可以另PO文章討論。 我的問題都只是問題, 土法煉鋼就不是好方法?TimeZoneInfo就比較高尚? 這兩種我都會用,某篇說的日光節約我轉過、也知道, 但我還是很想問, 「什麼時候程式有高不高尚的寫法?」 Object-Oriented Programming 比 Procedural Programming 高尚? Service-Oriented Programming 比 Object-Oriented Programming 高尚? 我還是認為因時因地的程式才是好程式。 這裡的舉例就只是個舉例,並不含其他因素, 如果要加入其他因素,那討論就會偏掉。

12/29 12:54, , 5F
人家也只是好心提一下啊~"高不高尚"的論點是你自己提的~
12/29 12:54, 5F

12/29 12:58, , 6F
不是嗎?人家只是考量到別的使用情境~哪有說比較高尚?因時
12/29 12:58, 6F

12/29 12:59, , 7F
因地的當然應該贏廣泛設計式的程式~畢竟都"客制化"了...
12/29 12:59, 7F
所以我說,果然接下來的推文就歪串了。 結果都不是在討論Field與屬性,哎… 當舉例參雜別的考量,你會去說舉例有誤? 那我覺得以後版上沒人敢貼code了。 如同有人問說如何在textBox換行, 某人回答 \r\n,後來有人很回說用 Environment.NewLine, 然後還說 \r\n 別土法煉鋼,建議用 Environment.NewLine比較好, 我很想問,有差嗎? 我只想說, 不能因為微軟都幫你處理好了就笨笨的去用那些封裝method, 結果變成只會用,但不知道為何的程式設計師, 有時候土法煉鋼也是能學到不少東西。 如果覺得這舉例不好,那過幾天後我看看情況自刪文章, 反正貼code還會被認為誤導,以後打嘴砲就好, 反正用說的比用實作舉例簡單多了。 ※ 編輯: StupidGaGa (60.249.117.38), 12/31/2014 18:28:23

12/31 23:05, , 8F
都說了人家只是好心提醒,偏偏要想那麼多...
12/31 23:05, 8F
文章代碼(AID): #1KdC2lri (C_Sharp)
文章代碼(AID): #1KdC2lri (C_Sharp)