【发布时间】:2016-06-22 16:20:29
【问题描述】:
TimeSpan.Duration() 将为您提供TimeSpan 的持续时间的绝对值,这在某些情况下可能很有用。
然而,它是一种方法,而不是结构的属性。 the MSDN guidelines on choosing a method or a property 的第一段声明:
一般来说,方法代表动作,属性代表数据。 属性旨在像字段一样使用,这意味着属性 不应计算复杂或产生副作用。当它 不违反以下准则,考虑使用属性, 而不是一种方法,因为经验不足的开发人员会发现 属性更易于使用。
如果成员表示该类型的逻辑属性,请考虑使用属性。
(强调他们的。)
持续时间似乎也没有违反“使用方法如果”部分。
我认为这可能是出于向后兼容性的原因,所以我去了back to the property vs method guidelines for .NET 2,它们相对没有变化。所以我想知道 .NET 1.1 是否只是没有属性,but it did,所以我也不认为这就是原因。
【问题讨论】:
-
它返回一个新的
TimeSpan对象——这种副作用通常不是属性所期望的。不过命名还是有点不安。 -
大概这是一个疏忽,最初只是违反了指导方针。它时不时地发生。
DateTime.Now是一个值得注意的例子,它也是“错误”的。不幸的是,一旦进入,就很难做出改变。 -
@JeroenVannevel 它没有副作用;原始 TimeSpan 的状态没有改变。
-
它返回一个新的 TimeSpan 对象——这样的副作用通常不是属性所期望的。不过命名还是有点不安。 -- 哇。考虑到方法名称,这是出乎意料的。也许一个相关的问题可能是“为什么
TimeSpan.Duration()返回一个新结构?” -
Negate() 是另一个。这是一种 .NET 1.0 类型,它是在大约 17 年前编写的。 .NET 如果他们知道他们现在所知道的,那么他们肯定会看起来很多不同,但即使是大男孩也必须从版本 1 开始。你必须将它阅读为 GetDuration() 以通过减速带。它为未初始化的 TimeSpan 引发异常可能是合理的原因。为什么这对 Duration() 很重要,但对任何属性都不重要,这是一个更大的问题。
标签: c# methods properties timespan duration