什么准则适用于确定何时将类成员实现为属性而不是方法?

Sco*_*nce 5 .net c#

来自SubMain.NET编码标准PDF已经开始出现在"赞助者"区域中,似乎表明属性仅适用于逻辑数据成员(参见文档的第34-35页).在以下情况下,方法被认为是合适的:

  • 该操作是转换,例如Object.ToString().
  • 操作非常昂贵,您希望与用户通信他们应该考虑缓存结果.
  • 使用get访问器获取属性值会产生可观察到的副作用.
  • 连续两次调用该成员会产生不同的结果.
  • 执行顺序很重要.
  • 该成员是静态的,但返回一个可以更改的值.
  • 该成员返回一个数组.

大多数开发人员是否同意上面的属性与方法论点?如果是这样,为什么?如果没有,为什么不呢?

Joe*_*Joe 3

它们看起来很合理,并且基本上符合 MSDN 会员设计指南:

http://msdn.microsoft.com/en-us/library/ms229059.aspx

人们有时似乎忘记的一点 (*) 是调用者应该能够以任何顺序设置属性。对于支持设计器的类尤其重要,因为您无法确定生成的代码设置属性的顺序。

(*) 我记得 Codeplex 上的 Ajax 控制工具包的早期版本有许多错误,因为开发人员忘记了这一点。

至于“连续两次调用该成员会产生不同的结果”,每个规则都有一个例外,如属性 DateTime.Now 所示。