2017-09-03 51 views
-3

我在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行为有变化?

+1

'obj'实际上并没有任何行为。你的问题是一个理论/措辞问题吗? – luk2302

+0

在这个例子中,你的'obj'只会引用另一个新的对象。在没有说明什么是对象行为对你意味着什么的情况下,我们只能继续猜测。 – AndrewMcCoist

回答

1

它完全取决于对象的行为是否依赖于它的状态。有时候是这样。其他时间则不是。例如,你的Test类的对象实际上没有任何行为,我没有看到任何依赖于状态的东西。其他类非常多有依赖于状态的行为。

0

在你的例子中,你不会改变obj的行为。 你会改变它的属性。 只有在更改功能时,才能更改行为。 如果您想要对象的不同行为,例如,可以在ChangeBar函数中添加if语句,然后该对象将根据if行为。

public void ChangeBar(int newBar) 
{ 
    if (newBar < 0) 
    { 
     x = newBar; 
     \\ and do something 
    } 
    else 
    { 
     x = 0; 
     \\ and do something else 
    } 
} 

我希望这能回答你的问题。

相关问题