提供一点我个人的实作经验:
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:败絮其内,自己看到自己的模样。