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

Ubi*_*ity 58 .net c# datetime

阅读此博客文章后:http://wekeroad.com/post/4069048840/when-should-a-method-be-a-property,

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

DateTime aDt = DateTime.Now;
Run Code Online (Sandbox Code Playgroud)

代替

DateTime aDt = DateTime.Now();
Run Code Online (Sandbox Code Playgroud)
  • 最佳实践说:在连续两次调用成员时使用方法会产生不同的结果
  • 并且DateTime.Now是非确定方法/属性的完美示例.

你知道这个设计有什么理由吗?
或者,如果这只是一个小错误?

dev*_*tal 48

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

System.DateTime类具有readonly Now属性,该属性返回当前日期和时间.每次查询此属性时,它将返回不同的值.这是一个错误,Microsoft希望他们可以通过将Now设置为方法而不是属性来修复该类.

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

  • 我尊重杰弗里以及所有这些,但他没有引用这个来源,这让我觉得他正在做自己的解释.DateTime.Now是一种特殊情况,但在所有其他方面都符合指南.即使他们可以,我也不认为他们会改变这一点.否则,他们会弃用它并引入一种方法. (11认同)
  • *[.NET Framework Design Guidelines](http://www.amazon.com/Framework-Design-Guidelines-Conventions-Libraries/dp/0321545613/ref=dp_ob_title_bk)*中出现相同的哀悼.该书提供了更详细的理由.对于任何足够聪明的人来说,必须阅读这个问题.;-) (4认同)
  • 我同意它是Jeffrey的解释,但我相信他,因为你不能在一个类中拥有一个属性和一个具有相同名称的方法(所以创建方法并保持不推荐使用的属性是不可能的) (3认同)
  • 你引用的书中的摘录是对作者**个人意见**关于属性的解释的一部分:"就个人而言,我不喜欢属性,我希望它们不受Microsoft .NET Framework和它的编程语言." 我无法给出足够的理由说明为什么这种说法在如此多的层面上是错误的. (3认同)
  • 我一直认为这是一个错误,总是首先写一下Now(),至少叹一次叹息然后再使用退格两次. (2认同)

And*_*ber 7

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

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

编辑:

这只是发生在我身上:当然,如果某些内容在过渡期间更改了属性值,则对属性getter的两次后续调用可能会返回不同的结果.属性不应该是Constants.

所以,这就是(概念上)发生的事情DateTime.Now; 它的值在后续调用之间发生变化.