【发布时间】:2016-03-02 14:30:09
【问题描述】:
假设我有以下课程:
class MyClass
{
private int memberVar;
public MyClass(int passedInVar)
{
memberVar = passedInVar;
}
}
在构造函数中传入一个 int 并将其分配给私有成员变量。
我的问题是,最好在类的私有方法之间传递该 int 变量,还是不将 int 变量作为参数传递,而是让每个私有方法直接访问私有成员变量?
即这是(示例 A):
class MyClass
{
private int memberVar;
public MyClass(int passedInVar)
{
memberVar = passedInVar;
}
public MyPublicMethod()
{
MyPrivateMethod(memberVar);
}
public MyPrivateMethod(int variable)
{
// Do something with passed in variable...
}
}
比这更好(示例 B):
class MyClass
{
private int memberVar;
public MyClass(int passedInVar)
{
memberVar = passedInVar;
}
public MyPublicMethod()
{
MyPrivateMethod();
}
public MyPrivateMethod()
{
// Do something with memberVar...
}
}
我问的原因是我发现自己在两种风格之间切换。
我发现示例 A 的样式显示了代码的更多意图。您可以看到私有方法之间传递的内容,从而更清楚地了解该方法所影响的内容。
而示例 B 更简洁,因为 memberVar 没有在私有方法之间传递。然而,代码感觉更“副作用”,因为方法作用于哪些私有成员变量并不总是很明显。
感谢您对您认为最好的方法提出意见。
【问题讨论】:
-
如果你不在课堂上全局使用这个私有变量,为什么还要使用它?
-
@Richard Moore 我会选择第二种方法,因为所有方法都可以访问
memberVar的声明,因此传递变量将毫无意义。 -
我会说这取决于场景,也许私有方法可以对提供的值执行操作,这将使该方法更加灵活,因为您不必每次都设置一个字段您想使用该方法。我想说,只要你在整个应用程序中保持代码标准一致,我认为任何一种方法都不会比另一种更好,除非在某些情况下说。
-
私有属性和方法的构造方式完全取决于您,因为它们被封装在类中。话虽如此,考虑到您始终处于同一范围内,选项 B 对我来说似乎是最明智的。
-
在大多数情况下,我更喜欢第一种方法。我觉得它是一个适当的函数(输入和输出),并且不依赖于私有变量。数学中的函数有输入有输出。