Re: [問題] 新手學C#,有關{get;set;}的疑問
提供一點我個人的實作經驗:
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
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
討論串 (同標題文章)
以下文章回應了本文 (最舊先):
完整討論串 (本文為第 3 之 5 篇):
C_Sharp 近期熱門文章
PTT數位生活區 即時熱門文章