我在OOP中有一个普遍的问题,即如果我们改变对象的状态,那会改变对象的行为吗?
public class Test{
private int x;
private string y;
public Foo(int bar, string baz)
{
x = bar;
y = baz;
}
public void ChangeBar(int newBar)
{
x = newBar;
}
}
例如:
var obj = new Test (5, "yyy");
如果我将y
值更改为"www"
,这是否意味着obj
的行为发生了变化?
答案 0 :(得分:1)
这完全取决于对象的行为是否依赖于其状态。有时它是。其他时候不是。例如,Test
类的对象实际上没有任何行为,我看不到任何依赖于状态的对象。非常做的其他类具有依赖于状态的行为。
答案 1 :(得分:0)
在您的示例中,您不会更改obj的行为。 你会改变它的财产。 只有在更改功能时才能更改行为。 如果您想要对象的不同行为,您可以,例如,在ChangeBar函数中添加if语句,然后该对象将根据具体情况进行操作。
public void ChangeBar(int newBar)
{
if (newBar < 0)
{
x = newBar;
\\ and do something
}
else
{
x = 0;
\\ and do something else
}
}
我希望这能回答你的问题。