1

正是主题标题所说的,

在哪些情况下,您更喜欢使用公共函数来更改局部变量,而不是仅仅将该变量定义为公共并直接修改它?

4

5 回答 5

4

不要直接暴露数据成员:使用不透明的访问器意味着您可以在以后更改实现而不更改接口。


我应该知道。我不时走捷径,并有机会后悔。

于 2008-11-03T05:55:29.787 回答
2

显然,如果您想更改变量以对对象的状态产生其他影响(例如重新计算对象的某些其他属性),则必须使用 mutator 函数。

如果可以将变量设置为使对象处于无效状态的内容,则您可能还应该使用 mutator 函数。这样,如果即将发生非法事件,您可以抛出异常(或返回错误,或只是忽略)。这为调试创造了奇迹。

但是,如果某些变量可以用 mutator 函数修改,而其他变量是公共的,则程序员需要跟踪哪个是哪个。这是浪费时间和精力,因此在某些情况下,最简单的方法是对所有事情都使用 mutator 函数。

于 2008-11-03T05:55:22.813 回答
1

您应该提及您正在处理的语言,因为这会影响答案。

你的第一个想法应该是关于你的类的 API。如果您想保持该 API 稳定(而且您应该这样做!),那么请考虑一下您以后如何将今天的简单变量更改为成熟的方法。

在许多语言中,您无法在不更改调用代码的情况下将变量更改为方法。C、C++ 和 Java 属于这一类。永远不要在这些语言中使用公共变量,因为以后您将没有任何回旋余地。

在 Python 中,您可以在不更改调用者的情况下将变量更改为属性,因此您不必事先担心:使用公共变量。

我相信 C# 具有可以让您透明地将变量更改为方法的属性,但我不确定。

于 2008-11-03T12:59:24.707 回答
1

如果你纯粹从以下方面来看一个对象如果您纯粹从服务,您会意识到公开变量并不是公开这些服务的好方法。

API 必须反映对象的全部内容(以实现高内聚性),如果您定义一个 setValue(...),那么它并不是因为您需要一种方法来——今天——改变一个变量,但因为对象公开此服务是有意义的。

所以:

  1. 不要为您编写的每个类的每个成员提供访问器或修改器功能。仅当访问器/修改器方法是类接口 (API) 的合理且有用的部分时才提供访问器/修改器函数。

  2. 不要将这些方法视为访问器或修改器。相反,将它们视为访问或改变对象的某个抽象属性的方法,该属性恰好由今天的单个成员表示,但明天可能会以更复杂的方式计算。

于 2008-11-03T06:57:36.947 回答
0

如果你想改变一个类中的一个变量,你最好通过属性来做。

在外部修改变量并不是一个好习惯。

也考虑未来的发展。您可以在属性后面放置一些逻辑,而无需更改整个程序。

于 2008-11-03T05:51:43.273 回答