何时使用属性vs方法?

jde*_*tor 12 .net c# oop

可能重复:
属性与方法

关于何时使用属性与方法相比,是否有任何规则或一般最佳实践?从技术上讲,任何无参数方法都可以在属性中进行,任何属性都可以作为方法,但有时何时决定何时使用其中一个可以模糊.

在决定两者之间时,我希望得到一些你们要记住的规则.

cle*_*tus 12

一般标准是关于副作用.如果通过调用成员来获取值,则只获得该值,这是一个属性.如果有副作用,它应该是一种方法.

换句话说:即使属性不是字段,属性应该非常像字段.这意味着不会造成副作用,执行时间不会太长,也不会抛出异常.

  • 不抛出异常?如果值设置为无效值,您会怎么做?我认为这是在字段上使用属性的一种原因...能够在接受之前对值进行检查. (6认同)

bri*_*ley 5

添加到cletus所说的内容.

这来自msdn:"Property Usage Guidelines" http://msdn.microsoft.com/en-us/library/bzwdh01d(VS.71).aspx 请参阅"属性与方法"部分:

  • 该操作是转换,例如Object.ToString.
  • 操作非常昂贵,您希望与用户通信他们应该考虑缓存结果.
  • 使用get访问器获取属性值会产生可观察到的副作用.
  • 连续两次调用该成员会产生不同的结果.
  • 执行顺序很重要.请注意,应该能够以任何顺序设置和检索类型的属性.
  • 该成员是静态的,但返回一个可以更改的值.
  • 该成员返回一个数组.返回数组的属性可能会产生误导.通常需要返回内部数组的副本,以便用户无法更改内部状态.这与用户可以轻易地认为它是索引属性的事实相结合,导致代码效率低下.在下面的代码示例中,每次对Methods属性的调用都会创建数组的副本.结果,将在以下循环中创建2n + 1个阵列副本.