属性或方法,或者两者都有

本文关键字:两者都 或者 方法 属性 | 更新日期: 2023-09-27 18:09:46

在。net库和许多第三方库中,我可以看到在如何更改内部(私有)成员值方面存在一些约定,它们支持Properties()。. NET属性)或方法(这些在java中通常用作setter和getter),或者两者都用于程序员。

我想知道何时(以及为什么)使用属性,方法或两者。例如,控件的可见性可以使用Visible属性(在Windows窗体中)或调用方法Show()Hide()来更改。有一些值(我知道有一些内部/私有值)只能通过调用方法(如setter)来改变。在设计我自己的控件、类时,我对选择属性或方法(或两者都支持?)有点犹豫,事实上,选择任何一个都是可以的(Java就是一个只使用方法的例子)。我知道属性相对于方法(如getter和setter)的优势,但如果是这样,为什么我们必须在某些情况下使用方法,它们被呈现给程序员甚至取代属性。我对此有点困惑,对我来说(正如我所说的),当我只使用方法时,我感觉还好(就像我在java中所做的那样,它并不是那么糟糕:)。

我想知道你们在这方面的经验和惯例。我喜欢遵循编程中的标准约定(针对每种编程环境和每种语言)来区分它们。不像有些人发明了自己的风格,让其他程序员有点难以理解,比如在c#中使用c++命名约定(甚至PHP命名约定?)对我来说有点奇怪,抱歉。

属性或方法,或者两者都有

我知道属性相对于方法(如getter和setter)的优势,但如果是这样,为什么在某些情况下我们必须使用方法,它们被呈现给程序员甚至取代属性。

一般来说,在使用一个类的时候,人们期望一个属性是"快速的"并且没有副作用。另一方面,方法则暗示"某事"将要发生。

当选择是否基于属性或方法公开API时,我会尝试查看值/method/etc代表什么。如果它是一个,并且可以直接返回(或者非常快速地获取,几乎没有副作用),那么属性更有意义。

如果是一个操作,那么方法更有意义。

举个例子:将Visible属性设置为false不会立即隐藏控件——该属性不包含任何代码或调用任何隐藏控件的代码;相反,它会更改控件的状态,以便稍后将其隐藏(由其他代码)。相反,Hide方法将立即隐藏控件;Hide方法包含或调用实际隐藏控件的代码。

将Visible设置为false可能会隐藏控件(几乎立即),但这是因为有其他代码正在运行,这些代码检测到对象的状态发生了变化(Visible属性发生了变化),并立即响应,实际上使控件不可见。

我在这里谈论的是一般意义上的,没有参考任何实际的代码库;编写一个可见属性是完全可能的,因此它实际上隐藏了控件,但这打破了通常的惯例,即属性没有副作用。

所以,属性改变对象的状态,而方法实际上做一些事情(可能改变也可能不改变对象的状态)。