Ich bin auf "CorruptedString" (Lösung) gestoßen . Hier ist folgender Programmcode aus dem Buch:
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"
Warum zeigt dieses Programm "aaaaa" an? Ich verstehe dieses Programm wie folgt:
- Die CLR reserviert "Hallo" im internen Pool (ich stelle mir den internen Pool als eine Reihe von Zeichenfolgen vor).
string.Intern(s)tut eigentlich nichts, weil die CLR die Zeichenfolge "Hallo" reserviert hat - sie gibt nur die Adresse der reservierten Zeichenfolge "Hallo" zurück (Objekt s hat dieselbe Adresse)- Das Programm ändert den Inhalt der Zeichenfolge "Hallo" über einen Zeiger
- ??? Die Hello-Zeichenfolge sollte im internen Pool fehlen und ein Fehler sein! Aber es ist in Ordnung; Das Programm wird erfolgreich ausgeführt.
Wie ich den internen Pool verstehe, ist es wie eine Art Wörterbuch von String zu String. Oder habe ich etwas verpasst?