读完这篇博文后:http://wekeroad.com/post/4069048840/when-should-a-method-be-a-property,
我想知道微软为什么选择C#:
DateTime aDt = DateTime.Now;
而不是
DateTime aDt = DateTime.Now();
DateTime.Now
就是非确定性method/property.的完美示例
你知道这种设计有什么原因吗?
或者这只是一个小错误?
发布于 2011-03-26 04:54:03
我通过C#相信CLR,Jeffrey Richter提到DateTime.Now是一个错误。
System.DateTime类有一个readonly Now属性,该属性返回当前日期和时间。每次查询此属性时,它都会返回一个不同的值。这是一个错误,微软希望他们现在可以通过创建一个方法而不是属性来修复这个类。
通过C#的CLR第3版-第243页
发布于 2011-03-26 04:55:33
它实际上是确定性的;它的输出不是随机的,而是基于一些非常可预测的东西。
“当前时间”一直在变化;因此,为了使每次调用都相对“相同”,该值必须改变,以便每次调用它时,它都返回当前时间。
编辑:
我突然想到:当然,如果在此期间更改了属性值,则对属性getter的两次后续调用可能会返回不同的结果。属性不应为Constants
。
因此,这就是DateTime.Now
(从概念上)所发生的事情;它的值在随后的调用之间发生了变化。
发布于 2011-03-26 04:52:38
根据MSDN,当某些东西是对象的逻辑数据成员时,您应该使用属性:
http://msdn.microsoft.com/en-us/library/bzwdh01d%28VS.71%29.aspx#cpconpropertyusageguidelinesanchor1
接下来列出一种方法更适合的情况。具有讽刺意味的是,方法的规则之一是在连续的调用可能返回不同的结果时使用它,当然现在肯定满足这一标准。
就我个人而言,我认为这样做是为了消除对额外()的需求,但我发现缺少()令人困惑;我花了一段时间才从VB/VBA中的旧方法转变过来。
https://stackoverflow.com/questions/5437972
复制相似问题