2016-05-08 11 views
0

は例えば、私はクラス外部の変更を回避するにはどうすればよいですか?

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

そして、私はエンジン

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

を設定し、私はエンジン

engine.Change(); 

を変更した場合、その後Car.TheEngineも変更されています。どのように副作用を避けるためのより良いデザインを得るには?

+5

が変わる 'Change'方法をお持ちでない –

+2

できるだけ不変であるためにあなたのクラスを設計「エンジン」。代わりに、コピーの変更を実行してそのコピーを返す 'Change'メソッドを持たせてください。 –

答えて

1

ミューテータメソッドが公開されている場合、定義によってインスタンスが変更される可能性があります。必要なものを実現するには、そのようなすべてのメソッドが新しいインスタンスを返すようにします。

ので、この:

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

はこのように見えるように変更する必要があります。

public Engine Change() 
{ 
    return new Engine 
    { 
     PropertyA = this.PropertyA, 
     PropertyB = this.PropertyB + 1, 
     PropertyC = this.PropertyC, 
    }; 
} 
関連する問題