2016-05-08 38 views
0

例如,我有一個類如何避免外部變化?

class Car 
{ 
    Engine TheEngine {get; set;} 
} 

而當我設發動機

Engine engine = new Engine(); 
Car.TheEngine = engine; 

如果我改變發動機

engine.Change(); 

然後Car.TheEngine也發生了變化。如何獲得更好的設計以避免副作用?

+5

設計你的類儘可能 –

+2

爲不可改變不要有'Change'方法改變'引擎'。作爲替代方案,可以使用'Change'方法對副本執行更改並返回副本。 –

回答

1

如果你公開了一個mutator方法,那麼根據定義,該實例可能會發生變異。爲了實現你想要的,使所有這些方法返回一個新的實例。

所以,這樣的:

public void Change() 
{ 
    this.PropertyB++; 
} 

應改爲如下所示:

public Engine Change() 
{ 
    return new Engine 
    { 
     PropertyA = this.PropertyA, 
     PropertyB = this.PropertyB + 1, 
     PropertyC = this.PropertyC, 
    }; 
}