Sobes.tech
Junior

Kokios yra string klasės savybės C#?

sobes.tech AI

Atsakymas iš AI

C# klasė turi šias pagrindines savybes:

  1. Nepriklausomumas (Immutability): Po string objekto sukūrimo jo turinys negali būti pakeistas. Bet kokia operacija, kuri atrodo kaip eilutės keitimas (pvz., sujungimas), iš tikrųjų sukuria naują string objektą.

    string s1 = "Hello";
    string s2 = s1 + " World"; // Sukuriamas naujas `string` objektas "Hello World"
    // Objekto s1 turinys vis dar yra "Hello"
    

    Tai užtikrina saugumą daugiagijų aplinkose ir palengvina jų naudojimą kaip raktus kolekcijose, pvz., Dictionary.

  2. Nuorodinis tipas (Reference Type): Nors eilutės dažnai elgiasi kaip reikšmės tipai dėl perkrauto operatoriaus ir palyginimo pagal reikšmę, string yra nuorodinis tipas.

    string a = "test";
    string b = a; // b nuoroda į tą patį "test" objektą heap'e
    string c = "test"; // Jei "test" eilutė jau yra string pool'e, c taip pat nuoroda į tą patį objektą
    
  3. Operatoriaus + perkrovimas: Operatorius + yra perkrautas eilutėms sujungti.

    string firstName = "John";
    string lastName = "Doe";
    string fullName = firstName + " " + lastName; // Eilutės sujungimas
    

    Daugkartinis + naudojimas gali būti neefektyvus, nes sukuria laikinuosius objektus. Efektyvesniam didelio kiekio eilutės sujungimui rekomenduojama naudoti StringBuilder.

  4. Eilutės puliavimas (String Interning): .NET vykdymo aplinka turi mechanizmą, vadinamą eilutės puliu, kuris saugo unikalius eilutės literatus, apibrėžtus kode. Kai sukuriamas eilutės literatas, CLR patikrina, ar toks jau yra pule. Jei taip, grąžinama nuoroda į esamą objektą vietoj naujo sukūrimo.

    string str1 = "hello"; // "hello" pridedama (arba jau yra) pule
    string str2 = "hello"; // str2 nuoroda į tą patį objektą pule kaip ir str1
    Console.WriteLine(ReferenceEquals(str1, str2)); // Išves True
    

    Tai yra atminties optimizacija.

  5. Platus metodų rinkinys: string klasė siūlo daug metodų eilutėms manipuliuoti, įskaitant paiešką, pakeitimą, formatavimą, didžiųjų ir mažųjų raidžių konvertavimą ir kt.

    string original = "  Hello, World!  ";
    string trimmed = original.Trim(); // Pašalina tarpelius iš kraštų
    string upper = original.ToUpper(); // Konvertuoja į didžiąsias raides
    bool contains = original.Contains("World"); // Patikrina, ar yra podalis
    
  6. IEnumerable<char> įgyvendinimas: Eilutė iš esmės yra simbolių kolekcija ir įgyvendina IEnumerable<char> sąsają, leidžiančią pereiti per simbolius ir naudoti LINQ.

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