Je suis tombé sur "CorruptedString" (la Solution). Voici un code de programme à partir du livre de:
var s = "Hello";
string.Intern(s);
unsafe
{
fixed (char* c = s)
for (int i = 0; i < s.Length; i++)
c[i] = 'a';
}
Console.WriteLine("Hello"); // Displays: "aaaaa"
Pourquoi ce programme d'affichage "aaaaa"? Je comprends ce programme comme suit:
- Le CLR réserves "bonjour" dans la stagiaire de la piscine (j'ai l'image de la stagiaire de la piscine comme un ensemble de chaînes de caractères).
-
string.Intern(s)
ne fait rien, parce que le CLR avait réservé chaîne "Hello" qu'il renvoie l'adresse de l'réservés chaîne "Hello" (objet a la même adresse) - Le programme modifie le contenu de la chaîne "Hello" par l'intermédiaire d'un pointeur
- ??? Le Bonjour de la chaîne devrait être absent dans la stagiaire de la piscine, et il convient d'erreur! Mais c'est OK; le programme s'exécute correctement.
Comme je comprends le stagiaire de la piscine, c'est comme une sorte de dictionnaire de chaîne en chaîne. Ou peut-être que j'ai raté quelque chose?