为什么TimeSpan.Duration()是方法而不是属性?

时间:2016-03-08 16:03:32

标签: c# methods properties timespan duration

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,所以我也不会认为这也是原因。

1 个答案:

答案 0 :(得分:2)

我猜这是因为它可以在边界情况下抛出OverflowException。通常情况下,属性getter最好不要抛出异常(在某些情况下可能除了ObjectDisposedException),尽管我不知道具体说明这一点的指南。这可能包含在“产生副作用”指南中,因为抛出的异常肯定是副作用。