Ich arbeite daran, eine unveränderliche Klasse zu schaffen.
Ich habe alle Eigenschaften als schreibgeschützt markiert.
Ich habe eine Liste von Elementen in der Klasse.
Wenn die Eigenschaft schreibgeschützt ist, kann die Liste geändert werden.
Das Anzeigen der IEnumerable der Liste macht sie unveränderlich.
Ich wollte wissen, nach welchen Grundregeln man eine Klasse unveränderlich machen muss.
c#
.net
immutability
Biswanath
quelle
quelle
atomicity
,volatility
undimmutability
: Erster Teil , zweiter Teil , und Teil drei . Diese stammen aus seinem persönlichen Blog und sind meiner Meinung nach für Neulinge freundlicher als seine MSDN-Beiträge.Antworten:
Ich denke du bist auf dem richtigen Weg -
quelle
Um unveränderlich zu sein, sollten alle Ihre Eigenschaften und Felder schreibgeschützt sein. Und die Elemente in jeder Liste sollten selbst unveränderlich sein.
Sie können eine schreibgeschützte Listeneigenschaft wie folgt erstellen:
quelle
basic rules to make a class (that contains a list) immutable
. Die Semantik von ImmutableList ermöglicht eine effizientere Speichernutzung beim Hinzufügen von Elementen zu einer Kopie der Liste. Dies scheint mir jedoch ein spezifischerer Anwendungsfall zu sein.Beachten Sie außerdem Folgendes:
ist nicht unveränderlich, auch wenn es mit einem schreibgeschützten Schlüsselwort markiert ist. Sie können einzelne Array-Referenzen / -Werte weiterhin über den Index-Accessor ändern.
quelle
Verwenden Sie die
ReadOnlyCollection
Klasse. Es befindet sich imSystem.Collections.ObjectModel
Namespace.Legen Sie für alles, was Ihre Liste zurückgibt (oder im Konstruktor), die Liste als schreibgeschützte Sammlung fest.
quelle
Eine andere Möglichkeit wäre, ein Besuchermuster zu verwenden, anstatt überhaupt interne Sammlungen freizulegen.
quelle
Durch die Verwendung von ReadOnlyCollection kann der Client diese nicht ändern.
quelle