Les mots clés const et readonly permettent de déclarer un objet qu'on ne pourra pas réassigner. Cela signifie que si on prend un objet un peu évolué (pas un type primitif en gros), tu pourras toujours modifier le contenu de l'objet s'il expose des propriétés ou méthodes le permettant.
Par exemple si on considère ceci
private readonly Person person = new Person();
Il ne sera pas possible de faire
Ou encore
Par contre rien n'empêche de faire
On ne peut pas réassigner l'objet mais on peut le modifier.
Dans le cas d'une List<T> il est possible d'avoir un wrapper en lecture seule avec la méthode AsReadOnly. Tu ne pourras pas ajouter ou supprimer des éléments à la liste. Par contre les éléments de la liste ne seront pas en lecture seule. Donc il sera possible de modifier les éléments de la liste, même si la liste n'est pas modifiable.
Ceci ne sera pas possible
Puisque cela modifie la collection. Par contre
Fonctionnera. On ne touche pas à la collection mais à un de ses éléments.
Si la méthode AsReadOnly ne te convient pas et que tu veux que l'ensemble soit en lecture seule deux solutions.
Tu renvoies une copie complète de la liste afin que ta version interne ne puisse être modifiée, cela suffit en général si ce qui importe c'est de préserver l'état interne.
Sinon il faut que tu gères un wrapper en lecture seule pour les objets de la collection. Plus lourd à mettre en place pour un gain inexistant je pense.
Partager