作者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/cn.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