Je travaille sur la création d'une classe immuable.
J'ai marqué toutes les propriétés en lecture seule.
J'ai une liste d'articles dans la classe.
Bien que si la propriété est en lecture seule, la liste peut être modifiée.
L'exposition du IEnumerable de la liste le rend immuable.
Je voulais savoir quelles sont les règles de base à suivre pour rendre une classe immuable?
c#
.net
immutability
Biswanath
la source
la source
atomicity
,volatility
, etimmutability
: Première partie , deuxième partie et troisième partie . Ceux-ci proviennent de son blog personnel et, je crois, plus conviviaux pour les débutants que ses messages MSDN.Réponses:
Je pense que vous êtes sur la bonne voie -
la source
Pour être immuable, toutes vos propriétés et champs doivent être en lecture seule. Et les éléments de toute liste doivent eux-mêmes être immuables.
Vous pouvez créer une propriété de liste en lecture seule comme suit:
la source
basic rules to make a class (that contains a list) immutable
. La sémantique ImmutableList permet une utilisation plus efficace de la mémoire lors de l'ajout d'éléments à une copie de la liste, mais cela me semble être un cas d'utilisation plus spécifique.Gardez également à l'esprit que:
n'est pas immuable même s'il est marqué avec un mot-clé en lecture seule. Vous pouvez toujours modifier les références / valeurs de tableau individuelles par l'accesseur d'index.
la source
Utilisez la
ReadOnlyCollection
classe. Il est situé dans l'System.Collections.ObjectModel
espace de noms.Sur tout ce qui renvoie votre liste (ou dans le constructeur), définissez la liste comme une collection en lecture seule.
la source
Une autre option serait d'utiliser un modèle de visiteur au lieu d'exposer des collections internes du tout.
la source
L'utilisation de ReadOnlyCollection empêchera le client de le modifier.
la source