2017-09-03 54 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 
    } 
} 

我希望這能回答你的問題。

相關問題