提供一點我個人的實作經驗:
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:敗絮其內,自己看到自己的模樣。