Sobes.tech
Junior

Care sunt caracteristicile clasei string în C#?

sobes.tech AI

Răspuns de la AI

Clasa string în C# are următoarele caracteristici principale:

  1. Imutabilitate (Immutability): După crearea unui obiect string, conținutul său nu poate fi modificat. Orice operație care pare să modifice șirul (de exemplu, concatenarea) creează de fapt un nou obiect string.

    string s1 = "Hello";
    string s2 = s1 + " World"; // Se creează un nou obiect string pentru "Hello World"
    // Obiectul s1 încă conține "Hello"
    

    Acest lucru face ca șirurile să fie sigure pentru utilizarea în medii multi-thread și simplifică utilizarea lor ca chei în colecții precum Dictionary.

  2. Tip referință (Reference Type): Deși șirurile se comportă adesea ca tipuri de valoare datorită supraîncărcării operatorilor și comparației după valoare, string este un tip de referință.

    string a = "test";
    string b = a; // b face referire la același obiect "test" în heap
    string c = "test"; // Dacă șirul "test" este deja în pool-ul de șiruri, și c va face referire la același obiect
    
  3. Supraincarcarea operatorului +: Operatorul + este supraincarcat pentru concatenarea șirurilor.

    string firstName = "John";
    string lastName = "Doe";
    string fullName = firstName + " " + lastName; // Concatenare de șiruri
    

    Concatenarea multiplă cu + poate fi ineficientă din cauza creării de obiecte temporare. Pentru o concatenare mai eficientă a multor șiruri, se recomandă utilizarea StringBuilder.

  4. Pool-ul de șiruri (String Interning): Mediu de execuție .NET are un mecanism numit pool de șiruri, care stochează literale de șiruri unice definite în cod. Când se creează un literal de șir, CLR verifică dacă deja există în pool. Dacă da, se returnează o referință la obiectul existent în loc să se creeze unul nou.

    string str1 = "hello"; // "hello" este adăugat (sau deja există) în pool
    string str2 = "hello"; // str2 face referire la același obiect în pool ca și str1
    Console.WriteLine(ReferenceEquals(str1, str2)); // Va afișa True
    

    Aceasta este o optimizare a memoriei.

  5. Set extins de metode: Clasa string oferă un set bogat de metode pentru manipularea șirurilor, inclusiv căutare, înlocuire, formatare, conversie la majuscule/minuscule și multe altele.

    string original = "  Hello, World!  ";
    string trimmed = original.Trim(); // Elimină spațiile de la margini
    string upper = original.ToUpper(); // Convertește în majuscule
    bool contains = original.Contains("World"); // Verifică dacă conține o subșir
    
  6. Implementarea IEnumerable<char>: Șirul este în esență o colecție de caractere și implementează interfața IEnumerable<char>, ceea ce permite parcurgerea caracterelor și utilizarea LINQ.

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