Sobes.tech
Junior

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:

  1. Neměnnost (Immutability): Po vytvoření objektu string jeho obsah nelze změnit. Jakákoli operace, která vypadá jako změna řetězce (například konkatenace), ve skutečnosti vytvoří nový objekt string.

    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.

  2. 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, string je 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
    
  3. 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žít StringBuilder.

  4. 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 True
    

    To je optimalizace paměti.

  5. Rozsáhlá sada metod: Třída string poskytuje 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
    
  6. 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);
    }