我发现使用属性
之间的功能差异很小public readonly property foo as string
get
return bar
end get
end property
或函数
public function foo() as string
return bar
end function
为什么我要将一种形式用在另一种形式上?
谢谢!
答案 0 :(得分:15)
我最近在Visual Studio杂志上阅读了一篇有趣的文章,讨论了方法和属性之间的差异。
属性应该每次都返回一个值和相同的值,除非在其间调用其他内容。
另一方面,方法通常需要在后台执行某些操作来获取值,或者方法可能会在每次调用时更改值,例如GetNextId()或其他内容。DateTime.Now是一个应该是Method的一个很好的例子,因为每次使用它都会返回一个不同的值。
对于有兴趣的人 - 这里是文章
答案 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)
我的观点是,如果你看一下这些词 - “属性”与“方法”相比。 “属性”一词意味着“这是对象中固有的一些值,如颜色,大小,所有者......调用属性意味着返回该值的操作相对简单。或者,如果它不是只读的属性,设置属性也应该是一个相对简单(和低成本)的操作。
另一方面,“方法”意味着“我必须做一些真正的工作来执行你要求我的任务” - 而一种方法可能会返回一个值(即使只是说“是的,我做了那个“),它正在做一大堆东西来为我获得这个价值 - 并且这样做,它会做一些与获得该值相关的其他操作。
因此,它主要是语义 - 只读属性可以像方法一样令人满意地实现 - 但我会看看返回该值所涉及的内容,以及每个将发送给检索该属性的人员的含义或称这种方法。