说我有以下课程:
class MyClass
{
private int memberVar;
public MyClass(int passedInVar)
{
memberVar = passedInVar;
}
}
Run Code Online (Sandbox Code Playgroud)
在构造函数中,传入一个int并将其分配给私有成员变量.
我的问题是,最好是在类的私有方法之间传递int变量,还是不将int变量作为参数传递,而是让每个私有方法直接访问private membervar?
即这是(例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...
}
}
Run Code Online (Sandbox Code Playgroud)
比这更好(例B):
class MyClass
{
private int memberVar;
public MyClass(int passedInVar)
{
memberVar = passedInVar;
}
public MyPublicMethod()
{
MyPrivateMethod();
}
public MyPrivateMethod()
{
// Do something with memberVar...
}
}
Run Code Online (Sandbox Code Playgroud)
我问的原因是我发现自己在两种风格之间切换.
我发现这个示例示例A的样式显示了代码的更多意图.您可以看到私有方法之间传递的内容,因此更明显受该方法影响的是什么.
示例B更清晰,因为memberVar不在私有方法之间传递.然而,代码感觉更"副作用",因为并不总是很明显该方法正在作用于哪个私有成员变量.
我很感激您对最合适的方法的看法.
投票支持第二个解决方案。您正在使用当前上下文,这是一个正常的 - 使用上下文部分。它适合生活,适合代码。例如您使用策略1的映像。如果您的私有方法之一,调用2次或多次,需要更改签名,那么您需要在2个或更多地方更改代码。否则,当您使用上下文时,它是不需要的。
我不愿告诉您哪个更好,而是给您一些提示:
readonly避免在整个对象的生命周期内设置人为错误。至少,您应该在设置者为私有的地方设置一个属性(即public string Name { get; private set; })。例如,计算矩形的面积将如下所示:
public class Rectangle
{
public int Area { get; private set; }
public void CalcArea(int a, int b)
{
Area = a * b;
}
}
Run Code Online (Sandbox Code Playgroud)
Area是一个类属性。您不会通过该区域作为的参数CalcArea,对吗?;)