0

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

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

我想知道您的经验以及您对此的约定。我喜欢遵循编程中的标准约定(针对每种编程环境和每种语言)来区分它们。不像一些发明自己的风格的人,这些风格对其他程序员来说有点难以辨认,例如在 C# 中使用 C++ 命名约定(甚至是 PHP 命名约定?)?对我来说有点奇怪,对不起。

请分享,谢谢...

4

2 回答 2

5

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

通常,使用类时期望属性将“快速”且没有副作用。另一方面,一种方法表明“某事”将会发生。

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

于 2013-04-17T16:06:23.270 回答
4

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

将 Visible 设置为 false 可能会隐藏控件(几乎立即),但这是因为正在运行的其他代码检测到对象的状态已更改(Visible 属性已更改)并通过实际使控件不可见来立即响应。

我在这里笼统地说,没有参考任何实际的代码库;完全可以对 Visible 属性进行编码,因此它实际上确实隐藏了控件,但这违反了属性没有副作用的通常约定。

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

于 2013-04-17T16:15:31.477 回答