【发布时间】:2010-12-23 16:26:43
【问题描述】:
关于何时使用属性与方法是否有任何规则或一般最佳实践?从技术上讲,任何无参数方法都可以在属性中创建,并且任何属性都可以成为方法,但有时何时决定何时使用其中一个可能会变得模糊。
我希望你们在决定两者之间时牢记一些规则。
【问题讨论】:
关于何时使用属性与方法是否有任何规则或一般最佳实践?从技术上讲,任何无参数方法都可以在属性中创建,并且任何属性都可以成为方法,但有时何时决定何时使用其中一个可能会变得模糊。
我希望你们在决定两者之间时牢记一些规则。
【问题讨论】:
一般标准是关于副作用。如果通过调用一个成员来获取一个值,你只能得到那个值,它是一个属性。如果有副作用,应该是方法吧。
换一种说法:即使属性不是字段,它们的行为也应该与字段非常相似。这意味着不会造成副作用,不会花费太长时间来执行并且不会抛出异常。
【讨论】:
补充 cletus 所说的内容。
这来自 msdn:“物业使用指南”http://msdn.microsoft.com/en-us/library/bzwdh01d(VS.71).aspx 请参阅“属性与方法”部分:
【讨论】:
我会看一下 this SO 关于属性与方法的帖子。
它提到看看Choosing Between Properties and Methods
【讨论】:
当某些 er.. 属性快速执行时使用属性(例如 ctrl.Color、ctrl.Text、ctrl.Width、DateTime.Now)。但如果它表示一个进程,请使用方法(例如 str.GetHash()、machine.GetFqdn()、file.GetMd5())。所以在文件 md5 中,你不会让它成为一个属性
这个最强调了when to use a method:
这项手术足够昂贵,以至于 你想和用户交流 他们应该考虑缓存 结果。
请注意,.NET 的 DateTime.Now,虽然速度很快并且是一个属性,但在程序中多次调用它时需要缓存它,即使彼此靠近。他们决定把它变成一个属性,属性有一种当前性的感觉,不像你调用一个方法,它没有instantness/currentness的感觉它。所以你需要考虑到,即使你得到一个值并且需要被缓存,但如果它需要感觉即时,一定要使用属性。
毕竟,如果某样东西真的很快并且感觉不像是一项昂贵的操作,那么它必须有一个可以传达其速度的构造。我认为这就是 .NET 有吸引力的原因(或任何具有属性构造的语言),它不会强制开发人员在可以将其设为属性时使用方法,它不会强制开发人员在可以创建属性时使用方法围绕重载运算符的高性能代码,这是最好的实用编程
【讨论】:
这是个好问题。我不知道这方面的任何最佳做法。 在我看来,这通常是一个常识问题。
属性与它自身的对象/类相关,通常对其进行描述。最好的例子是 UI 元素,Background、Color、IsEnabled 是属性。
方法通常是对象/类可以执行并产生结果的动作。最好的例子是 MessageBox 的 Show 方法。它执行一个动作并返回一个结果。
【讨论】:
在基本层面上,选择属性或方法的决定取决于“有”、“有”的论点。如果您需要的信息是属性或质量,请使用属性。如果是动作,那么方法。
但在实际层面上,可能很难一直以这种方式实施。
【讨论】:
用基本的话来说,属性描述对象,而方法是对象可以做的动作。
对于代表汽车的对象,drive() 是一个方法,color 是一个属性。
【讨论】: