在.NET库和许多第三方库中,我可以看到如何更改内部(私有)成员值有一些约定,它们支持属性(.NET属性)或方法(这些通常是在java中用作Setters和Getters)或两者用于程序员。
我想知道何时(以及为什么)使用属性,方法或两者。例如,可以使用可见属性(在Windows窗体中)或调用方法显示()或隐藏()来更改控件的可见性STRONG>。有一些值(我知道有一些内部/私有值)只能通过调用方法(如setter)来更改。在设计我自己的控件时,类我有点犹豫选择属性或方法(或支持两者?),事实上,选择其中任何一个也是可以的(Java是一个仅使用方法的例子)。我知道Properties相对于方法(作为getter和setter)的优势,但如果是这样的话,为什么我们必须在某些情况下使用方法,它们会被呈现给程序员甚至替换属性。我对此感到有些困惑,对我而言(正如我所说),我只使用方法时感觉很好(就像在java中一样,它并不是那么糟糕:)。
我想知道你的经历以及你的约定。我喜欢遵循编程中的标准约定(针对每个编程环境和每种语言)来区分它们。有些人发明了自己的风格,这些风格对于其他程序员来说有点难以理解,例如在C#中使用C ++命名约定(甚至PHP命名约定?)?对我来说有点奇怪,对不起。
请分享,谢谢...
答案 0 :(得分:5)
我知道Properties相对于方法(作为getter和setter)的优势,但如果是这样的话,为什么我们必须在某些情况下使用方法,它们会被呈现给程序员甚至替换属性。
一般来说,当使用一个属性“快”且没有副作用的类时,会有一种期望。另一方面,一种方法表明“某事”将会发生。
在选择是否基于属性或方法公开API时,我会尝试查看值/方法/ etc表示的内容。如果它是值,并且可以直接返回(或者很快得到很少的副作用),那么属性就更有意义了。如果这是一个操作,那么方法更有意义。
答案 1 :(得分:4)
举个例子:将Visible属性设置为false不会立即隐藏控件 - 该属性不包含任何代码或调用任何隐藏控件的代码;相反,它会改变控件的状态,以便稍后将其隐藏(通过其他代码)。相反,Hide方法会立即隐藏控件; Hide方法包含代码或调用实际隐藏控件的代码。
将Visible设置为false可能会隐藏控件(几乎立即),但这是因为还有其他代码正在运行,它检测到对象的状态已更改(Visible属性已更改)并通过实际生成控件立即响应无形。
我在一般意义上谈论的是没有引用任何实际的代码库;完全有可能对Visible属性进行编码,因此它实际上会隐藏控件,但这会破坏属性没有副作用的常规约定。
因此,属性会更改对象的状态,而方法实际上会执行某些操作(可能会也可能不会更改对象的状态)。