C# Language
Immutabilité
Recherche…
Classe System.String
En C # (et .NET), une chaîne est représentée par la classe System.String. Le mot-clé string
est un alias pour cette classe.
La classe System.String est immuable, c'est-à-dire qu'une fois créée, son état ne peut pas être modifié.
Donc, toutes les opérations que vous effectuez sur une chaîne comme Substring, Remove, Replace, concatenation using +
operator etc. vont créer une nouvelle chaîne et la renvoyer.
Voir le programme suivant pour la démonstration -
string str = "mystring";
string newString = str.Substring(3);
Console.WriteLine(newString);
Console.WriteLine(str);
Cela imprimera des string
et des mystring
respectivement.
Cordes et immuabilité
Les types immuables sont des types qui, lorsqu'ils sont modifiés, créent une nouvelle version de l'objet en mémoire, plutôt que de modifier l'objet existant en mémoire. L'exemple le plus simple est le type de string
intégré.
Prenant le code suivant, qui ajoute "world" sur le mot "Hello"
string myString = "hello";
myString += " world";
Ce qui se passe en mémoire dans ce cas, c'est qu'un nouvel objet est créé lorsque vous ajoutez à la string
dans la deuxième ligne. Si vous faites cela dans le cadre d'une grande boucle, cela peut entraîner des problèmes de performances dans votre application.
L'équivalent mutable pour une string
est un StringBuilder
Prendre le code suivant
StringBuilder myStringBuilder = new StringBuilder("hello");
myStringBuilder.append(" world");
Lorsque vous exécutez cela, vous modifiez l'objet StringBuilder
lui-même en mémoire.