是否应将所有具有返回值的方法转换为属性?

时间:2010-05-19 14:31:47

标签: .net

我只是在思考它,因为.Net已经引入了属性,在某种情况下,您希望将代码保留为返回值而不是readonly属性的方法。

4 个答案:

答案 0 :(得分:10)

没有。我建议您查看Microsoft's Property Usage Guidlines

  

类库设计者经常必须这样做   决定实施一个班级   会员作为财产或方法。在   一般来说,方法代表行动和   属性代表数据。使用   以下指导可以帮助您   选择这些选项。

     
      
  • 当成员是逻辑数据成员时使用属性。在下面的   成员声明,​​名称是   属性因为它是合乎逻辑的   班上的成员。
  •   
  • 在以下情况下使用方法:      
        
    • 该操作是转换,例如Object.ToString。
    •   
    • 操作非常昂贵,您希望与之通信   用户,他们应该考虑缓存   结果。
    •   
    • 使用get访问器获取属性值将具有   可观察到的副作用。
    •   
    • 连续两次致电会员会产生不同的结果。
    •   
    • 执行顺序很重要。注意一个类型   应该能够设置属性   并以任何顺序检索。
    •   
    • 该成员是静态的,但返回一个可以更改的值。
    •   
    • 该成员返回一个数组。返回数组的属性可以是   非常误导。通常是   必须退回的副本   内部数组使用户不能   改变内部状态。这个,耦合   事实上,用户可以轻松地   假设它是一个索引属性,   导致代码效率低下。在里面   下面的代码示例,每次调用   Methods属性创建的副本   数组。结果,2n + 1份副本   数组将在。中创建   以下循环。
    •   
  •   

答案 1 :(得分:2)

如果它是无参数的方法,那么值得考虑迁移到属性,是的。如果它只是返回一个私有成员变量,那么它肯定应该是一个属性。

但总的来说,不是,并非每个返回值的方法都应该是属性。有些方法实例化对象并返回它们,那些永远不会属性。某些方法返回this,允许使用“Fluent”API。这些都不应该是属性。

答案 2 :(得分:0)

不,他们不应该。

答案 3 :(得分:0)

没有。 返回某些内容并执行昂贵操作的方法不应该修改为属性。

带参数的方法无法转换为属性。

不应将返回数组的方法转换为属性。这是因为在这种情况下,您应该返回数组的副本,以禁止某人在类外修改数组。 当您使用返回数组副本的属性时,程序员更可能编写如下内容:

foreach( var x in myClass.PropertyThatReturnsArray )
{
}

对于每次迭代,都将创建一个新的数组副本。 相反,如果你把它写成一种方法,那么程序员就更有可能写出这个:

var foo = myClass.GetTheArray();

foreach( var x in foo )
{
}

(这是fxcop强制执行的规则:http://msdn.microsoft.com/en-us/library/0fss9skc(VS.80).aspx)。

这是一种心理上的事情。 :)