Jaké jsou vlastnosti třídy string v C#?
sobes.tech AI
Odpověď od AI
Třída string v C# má následující klíčové vlastnosti:
-
Neměnnost (Immutability): Po vytvoření objektu
stringjeho obsah nelze změnit. Jakákoli operace, která vypadá jako změna řetězce (například konkatenace), ve skutečnosti vytvoří nový objektstring.string s1 = "Hello"; string s2 = s1 + " World"; // Vytvoří se nový objekt string pro "Hello World" // Objekt s1 stále obsahuje "Hello"To činí řetězce bezpečnými pro použití ve vícestopých prostředích a usnadňuje jejich použití jako klíče v kolekcích, jako je
Dictionary. -
Referenční typ (Reference Type): Přestože se řetězce často chovají jako hodnotové typy díky přetížení operátorů a porovnání podle hodnoty,
stringje referenční typ.string a = "test"; string b = a; // b odkazuje na stejný objekt "test" na haldě string c = "test"; // Pokud je řetězec "test" již v poolu řetězců, c na něj bude odkazovat -
Přetížení operátoru
+: Operátor+je přetížen pro spojování řetězců.string firstName = "John"; string lastName = "Doe"; string fullName = firstName + " " + lastName; // Spojení řetězcůVícenásobné spojování pomocí
+může být neefektivní kvůli vytváření dočasných objektů. Pro efektivnější spojování velkého množství řetězců se doporučuje použítStringBuilder. -
Pool řetězců (String Interning): Prostředí .NET má mechanismus nazývaný pool řetězců, který ukládá unikátní literály řetězců definované v kódu. Při vytváření literálu řetězce CLR kontroluje, zda již takový řetězec v poolu existuje. Pokud ano, vrátí odkaz na existující objekt místo vytváření nového.
string str1 = "hello"; // "hello" je přidáno (nebo již existuje) v poolu string str2 = "hello"; // str2 odkazuje na stejný objekt v poolu jako str1 Console.WriteLine(ReferenceEquals(str1, str2)); // Vypíše TrueTo je optimalizace paměti.
-
Rozsáhlá sada metod: Třída
stringposkytuje bohatou sadu metod pro manipulaci s řetězci, včetně hledání, nahrazování, formátování, převodu na velká/malá písmena a mnoho dalšího.string original = " Hello, World! "; string trimmed = original.Trim(); // Odstranění mezer na okrajích string upper = original.ToUpper(); // Převod na velká písmena bool contains = original.Contains("World"); // Kontrola přítomnosti podřetězce -
Implementace
IEnumerable<char>: Řetězec je v podstatě kolekcí znaků a implementuje rozhraníIEnumerable<char>, což umožňuje procházet znaky v řetězci a používat LINQ.string text = "C#"; foreach (char c in text) { Console.WriteLine(c); }