2016-05-08 4 views
0

Zum Beispiel habe ich eine KlasseWie vermeidet man die äußeren Veränderungen?

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

Und wenn ich den Motor

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

eingestellt Und wenn ich Motor ändern

engine.Change(); 

Dann wird Car.TheEngine ebenfalls geändert. Wie man ein besseres Design erhält, um den Nebeneffekt zu vermeiden?

+5

Ihre Klassen entwerfen als unveränderlich wie möglich –

+2

werden Sie eine 'Change' Methode nicht haben, ändert sich die 'Engine'. Als Alternative haben Sie eine Change-Methode, die die Änderung an einer Kopie vornimmt und die Kopie zurückgibt. –

Antwort

1

Wenn Sie eine Mutator-Methode verfügbar machen, kann die Instanz per Definition mutiert werden. Um zu erreichen, was Sie wollen, stellen Sie allen Methoden eine neue Instanz zur Verfügung.

Also, das:

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

geändert werden sollte wie folgt aussehen:

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