Tous string
Les objets sont immuables en C#. Les objets de la classe string
une fois créés, ne peuvent jamais représenter une autre valeur que celle avec laquelle ils ont été construits. Toutes les opérations qui semblent "modifier" une chaîne de caractères en produisent une nouvelle. C'est inefficace pour la mémoire, mais extrêmement utile pour être sûr qu'une chaîne ne changera pas sous vos yeux, car tant que vous ne changez pas votre référence, la chaîne à laquelle vous faites référence ne changera jamais.
Un objet mutable, en revanche, possède des champs de données qui peuvent être modifiés. Une ou plusieurs de ses méthodes modifient le contenu de l'objet, ou bien il possède une propriété qui, lorsqu'elle est écrite, modifie la valeur de l'objet.
Si vous avez un objet mutable - le plus similaire à String est StringBuffer
- alors vous devez en faire une copie si vous voulez être absolument sûr qu'il ne se dérobera pas sous vos yeux. C'est pourquoi il est dangereux d'utiliser des objets mutables comme clés dans une forme de Dictionary
ou set - les objets eux-mêmes pourraient changer, et la structure de données n'aurait aucun moyen de le savoir, ce qui entraînerait des données corrompues qui, au final, feraient planter votre programme.
Cependant, vous pouvez modifier son contenu, ce qui est beaucoup, beaucoup plus efficace en termes de mémoire que de faire une copie complète parce que vous voulez changer un seul caractère, ou quelque chose de similaire.
En général, la bonne chose à faire est d'utiliser des objets mutables pendant que vous créez quelque chose, et des objets immuables une fois que vous avez terminé. Ceci s'applique aux objets qui ont des formes immuables, bien sûr ; la plupart des collections ne le font pas. Il est souvent utile de fournir des formes de collections en lecture seule, ce qui est l'équivalent de l'immuable, lorsque vous envoyez l'état interne de votre collection à d'autres contextes - sinon, quelque chose pourrait prendre cette valeur de retour, y faire quelque chose, et corrompre vos données.
2 votes
Duplication possible de - stackoverflow.com/questions/2365272/why-net-string-is-immutable
6 votes
Ce n'est pas identique. Très similaire, mais ce n'est pas la même chose qu'identique.
2 votes
Question connexe sur les éléments internes de StringBuilder stackoverflow.com/q/3564906/38206