Sobes.tech
Junior

Aké sú vlastnosti triedy string v C#?

sobes.tech AI

Odpoveď od AI

Trieda string v jazyku C# má nasledujúce kľúčové vlastnosti:

  1. Nemennosť (Immutability): Po vytvorení objektu string jeho obsah nemôže byť zmenený. Akákoľvek operácia, ktorá vyzerá ako zmena reťazca (napríklad konkatenácia), v skutočnosti vytvára nový objekt string.

    string s1 = "Hello";
    string s2 = s1 + " World"; // Vytvorí sa nový objekt string pre "Hello World"
    // Objekt s1 stále obsahuje "Hello"
    

    To robí reťazce bezpečnými na použitie v viacvláknových prostrediach a uľahčuje ich použitie ako kľúče v kolekciách, ako je Dictionary.

  2. Referenčný typ (Reference Type): Napriek tomu, že reťazce sa často správajú ako hodnotové typy vďaka preťaženému operátoru a porovnávaniu podľa hodnoty, string je referenčný typ.

    string a = "test";
    string b = a; // b odkazuje na ten istý objekt "test" na halde
    string c = "test"; // Ak je reťazec "test" už v pooli reťazcov, c naň bude odkazovať
    
  3. Preťaženie operátora +: Operátor + je preťažený na spojovanie reťazcov.

    string firstName = "John";
    string lastName = "Doe";
    string fullName = firstName + " " + lastName; // Spojenie reťazcov
    

    Viacnásobné spojovanie pomocou + môže byť neefektívne kvôli vytváraniu dočasných objektov. Pre efektívnejšie spojovanie veľkého množstva reťazcov sa odporúča použiť StringBuilder.

  4. Pool reťazcov (String Interning): Prostredie .NET má mechanizmus nazývaný pool reťazcov, ktorý uchováva unikátne literály reťazcov definované v kóde. Keď sa vytvorí literál reťazca, CLR kontroluje, či taký už neexistuje v poole. Ak áno, vráti odkaz na existujúci objekt namiesto vytvárania nového.

    string str1 = "hello"; // "hello" sa pridáva (alebo už existuje) do poolu
    string str2 = "hello"; // str2 odkazuje na ten istý objekt v poole ako str1
    Console.WriteLine(ReferenceEquals(str1, str2)); // Vypíše True
    

    Toto je optimalizácia pamäte.

  5. Rozsiahly súbor metód: Trieda string poskytuje bohatý súbor metód na manipuláciu s reťazcami, vrátane vyhľadávania, nahradzovania, formátovania, prevodu na veľké/malé písmená a mnoho ďalších.

    string original = "  Hello, World!  ";
    string trimmed = original.Trim(); // Odstránenie medzier na okrajoch
    string upper = original.ToUpper(); // Prevod na veľké písmená
    bool contains = original.Contains("World"); // Kontrola prítomnosti podreťazca
    
  6. Implementácia IEnumerable<char>: Reťazec je v podstate kolekcia znakov a implementuje rozhranie IEnumerable<char>, čo umožňuje prechádzanie znakov v reťazci a používanie LINQ.

    string text = "C#";
    foreach (char c in text)
    {
        Console.WriteLine(c);
    }