首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >为什么DateTime.Now是一个属性而不是一个方法?

为什么DateTime.Now是一个属性而不是一个方法?
EN

Stack Overflow用户
提问于 2011-03-26 04:47:45
回答 5查看 5K关注 0票数 60

读完这篇博文后:http://wekeroad.com/post/4069048840/when-should-a-method-be-a-property

我想知道微软为什么选择C#:

代码语言:javascript
复制
DateTime aDt = DateTime.Now;

而不是

代码语言:javascript
复制
DateTime aDt = DateTime.Now();

  • 最佳实践表明:在连续两次调用成员时使用一个方法会产生不同的结果
  • DateTime.Now就是非确定性method/property.

的完美示例

你知道这种设计有什么原因吗?

或者这只是一个小错误?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2011-03-26 04:54:03

我通过C#相信CLR,Jeffrey Richter提到DateTime.Now是一个错误。

System.DateTime类有一个readonly Now属性,该属性返回当前日期和时间。每次查询此属性时,它都会返回一个不同的值。这是一个错误,微软希望他们现在可以通过创建一个方法而不是属性来修复这个类。

通过C#的CLR第3版-第243页

票数 49
EN

Stack Overflow用户

发布于 2011-03-26 04:55:33

它实际上是确定性的;它的输出不是随机的,而是基于一些非常可预测的东西。

“当前时间”一直在变化;因此,为了使每次调用都相对“相同”,该值必须改变,以便每次调用它时,它都返回当前时间。

编辑:

我突然想到:当然,如果在此期间更改了属性值,则对属性getter的两次后续调用可能会返回不同的结果。属性不应为Constants

因此,这就是DateTime.Now(从概念上)所发生的事情;它的值在随后的调用之间发生了变化。

票数 7
EN

Stack Overflow用户

发布于 2011-03-26 04:52:38

根据MSDN,当某些东西是对象的逻辑数据成员时,您应该使用属性:

http://msdn.microsoft.com/en-us/library/bzwdh01d%28VS.71%29.aspx#cpconpropertyusageguidelinesanchor1

接下来列出一种方法更适合的情况。具有讽刺意味的是,方法的规则之一是在连续的调用可能返回不同的结果时使用它,当然现在肯定满足这一标准。

就我个人而言,我认为这样做是为了消除对额外()的需求,但我发现缺少()令人困惑;我花了一段时间才从VB/VBA中的旧方法转变过来。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5437972

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档