可能的重复:
性vs的方法

对于许多情况下,它是显而易见的东西是否应该是一个酒店或一方法但也有项目可能会被认为是含糊不清。

显而易见的性质:

  • "名字"
  • "长度"

显而易见的方法:

  • "图"
  • "打印"

模糊的:

  • "有效的"/"IsValid"/"验证"
  • "界外球"/"IsInBounds"/"CheckBounds"
  • "AverageChildValue"/"CalcAverageChildValue"
  • "ColorSaturation"/"SetColorSaturation"

我想我会倾向的方法模糊不清,但是没有人知道的一条规则,或者《公约》,有助于决定这个吗?E.g。应该所有的性质可O(1)?应该财产不能够改变的其他数据(ColorSaturation可能会改变R、G、B值)?它应该不会有财产,如果有计算或聚合?

只是从学术角度看,(并不是因为我认为这是一个很好的想法)是否有理由不去疯狂的性质和刚刚做的一切,是一个询问的级没有采取一种参数,一切都可以改变关于类与一个单一的论点,并不能失败了,一个酒店?

有帮助吗?

解决方案

我通常会把一个酒店来一个函数,如果有以下行为

  • 导致一个副作用(比其他设定的支持字段)
  • 执行是昂贵的时相比,说场访问
  • 实施具有较高的复杂性比Log(N)
  • 可以把一个异常

其他提示

我发现一些有趣的文本有关这个

MSDN|性vs的方法

编辑

它说这样的话:

使用一个酒店的时候

  • 成员是合乎逻辑的数据成员

使用的方法时

  • 作为一个转换,例如对象。ToString.
  • 操作是昂贵的,你想要通信的用户,他们应该考虑缓存的结果。
  • 获得的财产价值的使用得到的访问将有可观察到的副作用。
  • 呼吁成员连续两次产生不同的结果。
  • 为执行是重要的。注意到一种类型的特性应能够集和检索的任何顺序。
  • 成员是静态的,而是返回价值,可以改变的。
  • 成员返回的一个阵列。性返回阵列可能会产生误导。
  • 通常有必要返回的副本,内部阵列,使用户无法改变内部的状态。这个,加上一个事实,即用户可以很容易地假设它是一种索引的财产,导致效率低下的代码。

另一个考虑是bindability.最框架可以结合只要属性。例如,如果你想IsValid可用于结合(说的是,作为一个结合sourcee为"确定"的按钮启用性),然后它已是一个属性,而不是一种方法。

在决定是否使用的财产或一个方法还应考虑额的工作方法涉及。I.e。如果它是较廉价,以检索的价值,使其财产,如果成本高昂使它的方法。

如果可以计算的东西从你已经拥有、使用方法,如果你的价值已是一个基础,用于操作与或计算别的东西应该财产。

例如,如果你想检查是否某些用户输入的是最新的而且你可以做它与你的特有的专利算法,使用的方法 Validate().如果用户只发送你一个形式提交新谢克尔,目前地址是有效的,使用的财产 valid.但它仅仅是一个共同的方法,可能取决于什么你实际上想要的。

我亲自做出的选择上的复杂性和什么方法/酒店是要做的事情。如果我所做的是设定一个数值,即_name=事,然后我去一个酒店。甚至如果我要做一些非常基本的计算或有条件的声明,我将坚持有的财产。但如果有什么需要一些严重的工作或甚至是温和的工作,我将使用的方法。没有什么aggrevates我更然后设置一个属性,并突然一大堆更多的代码比我预期得到执行。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top