Comme nous le savons tous, des chaînes dans le .NET sont immuables. (Eh bien, pas à 100% totalement immuable, mais immuable par la conception et utilisée comme telle par toute personne raisonnable, de toute façon.)
De ce fait, il fondamentalement OK que, par exemple, le code suivant juste stocke une référence à la même chaîne à deux variables:
string x = "shark";
string y = x.Substring(0);
// Proof:
fixed (char* c = y)
{
c[4] = 'p';
}
Console.WriteLine(x);
Console.WriteLine(y);
La au-dessus de sorties:
sharp
sharp
Clairement x
et y
se réfèrent à la même string
objet. Alors, voici ma question: pourquoi n'ai - Substring
toujours partager l'état avec la chaîne source? Une chaîne est essentiellement un char*
pointeur avec une longueur de, droite? Il me semble donc les éléments suivants doivent au moins en théorie, être autorisé à assigner un seul bloc de mémoire pour contenir 5 caractères, avec deux variables pointant simplement à différents endroits à l'intérieur qu' (immuable) bloc:
string x = "shark";
string y = x.Substring(1);
// Does c[0] point to the same location as x[1]?
fixed (char* c = y)
{
c[0] = 'p';
}
// Apparently not...
Console.WriteLine(x);
Console.WriteLine(y);
La au-dessus de sorties:
shark
park