为什么使用readonly属性和函数更好?

时间:2008-10-31 19:43:13

标签: vb.net

我发现使用属性

之间的功能差异很小
public readonly property foo as string
  get
    return bar
  end get
end property

或函数

public function foo() as string
  return bar
end function

为什么我要将一种形式用在另一种形式上?

谢谢!

7 个答案:

答案 0 :(得分:15)

我最近在Visual Studio杂志上阅读了一篇有趣的文章,讨论了方法和属性之间的差异。

属性应该每次都返回一个值和相同的值,除非在其间调用其他内容。

另一方面,方法通常需要在后台执行某些操作来获取值,或者方法可能会在每次调用时更改值,例如GetNextId()或其他内容。

DateTime.Now是一个应该是Method的一个很好的例子,因为每次使用它都会返回一个不同的值。

对于有兴趣的人 - 这里是文章

Choose Between Methods and Properties

答案 1 :(得分:9)

纯粹是外表问题。方法意味着这样做,而属性意味着获取一些数据。

答案 2 :(得分:2)

在我的理解中,你无法对方法进行数据处理;只有属性。因此,财产带来了额外的好处。

答案 3 :(得分:2)

如果您基于框架设计指南,则只有在实际执行操作或访问使用成本高昂的资源(数据库,网络)时,才必须使用方法。

该属性给用户一种印象,即值存储在内存中,并且在调用方法时读取属性的速度可能比“获取值”更具意义。

Brad Abrams实际上写了一篇关于它的article,甚至发布在MSDN here上。

我强烈建议您购买这本书Framework Design Guidelines。这是每位开发人员必读的内容。

答案 4 :(得分:1)

除了James(意图声明)提到的语义之外,属性扮演着特殊的角色,因为它们的值由调试器显示,并且可以在视觉设计器中使用。

因此,如果没有一些外部操作,请确保属性的值不会更改,否则调试器会搞砸您的程序。

答案 5 :(得分:1)

据我所知,这一切都归于同一件事。 IL for .NET中的属性实际上只是名为PropertyName的属性的getPropertyName和setPropertyName函数。

所以在这方面它真的是一种风格问题。只需阅读以下内容即可:

person.Address.Street;

而不是

person.Address().Street();

所以,在某种程度上,它确实是代码美学的问题。

不幸的是,在 .NET C#中,不像Ruby那样优雅()总是可选的。

答案 6 :(得分:0)

我的观点是,如果你看一下这些词 - “属性”与“方法”相比。 “属性”一词意味着“这是对象中固有的一些值,如颜色,大小,所有者......调用属性意味着返回该值的操作相对简单。或者,如果它不是只读的属性,设置属性也应该是一个相对简单(和低成本)的操作。

另一方面,“方法”意味着“我必须做一些真正的工作来执行你要求我的任务” - 而一种方法可能会返回一个值(即使只是说“是的,我做了那个“),它正在做一大堆东西来为我获得这个价值 - 并且这样做,它会做一些与获得该值相关的其他操作。

因此,它主要是语义 - 只读属性可以像方法一样令人满意地实现 - 但我会看看返回该值所涉及的内容,以及每个将发送给检索该属性的人员的含义或称这种方法。