OO设计,在私有方法或访问成员变量之间传递参数?

Ric*_*ore 9 c# oop

说我有以下课程:

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不在私有方法之间传递.然而,代码感觉更"副作用",因为并不总是很明显该方法正在作用于哪个私有成员变量.

我很感激您对最合适的方法的看法.

pro*_*pow 5

投票支持第二个解决方案。您正在使用当前上下文,这是一个正常的 - 使用上下文部分。它适合生活,适合代码。例如您使用策略1的映像。如果您的私有方法之一,调用2次或多次,需要更改签名,那么您需要在2个或更多地方更改代码。否则,当您使用上下文时,它是不需要的。


Mat*_*zer 5

我不愿告诉您哪个更好,而是给您一些提示:

  • 请勿直接访问类字段。它们应该使用properties封装。
  • 实例方法,因为它们是某些特定类实例的一部分,否则不应该接受参数,除非某些方法执行过程中所需的值比对象本身所包含的值需要更多的信息,或者如果数据不应该由对象持有。类,因为它们不代表整个类的实际属性(即数据与类无关)。
  • 您不应该只是为了处理类字段而创建私有方法,因为您应该已经使用属性封装了它们。
  • 仅在构造时设置的类字段应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,对吗?;)
  • 您需要提供矩形边的长度。