方法Vs属性

时间:2010-06-15 02:28:01

标签: .net

我是.NET的新手。我有一个名为Project的类,一个项目可以有多个预测。现在如果我想检查项目是否有任何预测,我应该使用名为HasForecast()的readonly布尔属性,还是应该使用名为HasForecast()的方法基本上返回一个布尔值。从框架设计指南我开始知道当操作很复杂时应该使用方法,因为在这里我应该考虑方法,或者因为它是逻辑数据成员,所以我从DB中检索预测值我应该使用属性。如果我使用属性,我可以从其getter中调用DBLayer中的方法。请解释

此致,拉维

4 个答案:

答案 0 :(得分:8)

属性应该非常轻,行为和感觉像字段。如果您需要访问数据库,那么您应该使用方法。

请在此处查看MSDN:http://msdn.microsoft.com/en-us/library/bzwdh01d(VS.71).aspx

属性与方法

类库设计者通常必须决定将类成员实现为属性还是方法。通常,方法表示动作,属性表示数据。使用以下准则可帮助您选择这些选项。

时使用属性
  • 该成员是逻辑数据成员。在以下成员声明中,Name是属性,因为它是类的逻辑成员。

在以下时间使用方法:

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

答案 1 :(得分:2)

如果该方法调用将启动数据库查询,我会将其作为一个方法,也许更改名称,以明确这不是简单地返回字段的值。

答案 2 :(得分:0)

我学到的一条好规则是,如果有可能无法保证财产立即返回*或者甚至可能抛出异常,那么请使用方法。

*对于立即的变量定义,可以在属性中使用逻辑,但保持尽可能短。

答案 3 :(得分:0)

这不仅仅是关于惯例吗?

我的意思是,在一天结束时,不是属性只是普通的吸气剂和制定者的语法糖吗?