我只是在思考它,因为.Net已经引入了属性,在某种情况下,您希望将代码保留为返回值而不是readonly属性的方法。
答案 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)。
这是一种心理上的事情。 :)