Sobes.tech
Junior

Ինչպիսի՞ն են C#-ի string դասի առանձնահատկությունները։

sobes.tech AI

Պատասխան AI-ից

C#-ի string դասը ունի հետևյալ հիմնական առանձնահատկությունները.

  1. Անփոփոխություն (Immutability): string օբյեկտը ստեղծելուց հետո նրա պարունակությունը չի կարող փոխվել: Ամեն մի գործողություն, որը թվում է որպես տողի փոփոխություն (օրինակ՝ կոնկատենացիա), իրականում ստեղծում է նոր string օբյեկտ:

    string s1 = "Hello";
    string s2 = s1 + " World"; // Ստեղծվում է նոր string օբյեկտ "Hello World" համար
    // Օբյեկտը s1 մնում է "Hello"
    

    Սա ապահովում է տողերի անվտանգությունը բազմաթյանային միջավայրերում և հեշտացնում է դրանց օգտագործումը որպես բանալի հավաքածուներում, ինչպիսիք են Dictionary:

  2. Հղումային տիպ (Reference Type): Թեև տողերը հաճախ պահվում են որպես արժեքային տիպեր՝ օպերատորների և արժեքով համեմատության շնորհիվ, string-ը հղումային տիպ է:

    string a = "test";
    string b = a; // b հղում է նույն `test` օբյեկտին heap-ում
    string c = "test"; // Եթե `test` տողը արդեն կա տողերի պուլում, c-ն նույնպես հղում է այդ օբյեկտին
    
  3. + օպերատորի վերագրման: + օպերատորը վերագրված է տողերի կոնկատենացիայի համար:

    string firstName = "John";
    string lastName = "Doe";
    string fullName = firstName + " " + lastName; // Տողերի կոնկատենացիա
    

    Շատ անգամ կոնկատենացիան +-ով կարող է լինել ոչ արդյունավետ, քանի որ ստեղծում է ժամանակավոր օբյեկտներ: Ավելի արդյունավետ կոնկատենացիայի համար խորհուրդ է տրվում օգտագործել StringBuilder:

  4. Տողերի պուլ (String Interning): .NET- ի գործարկման միջավայրը ունի տողերի պուլ մեխանիզմ, որը պահում է եզակի տողային լիտերալները, որոնք սահմանված են կոդում: Երբ ստեղծվում է տողային լիտերալ, CLR- ն ստուգում է, արդյոք նմանը արդեն կա պուլում: Եթե կա, վերադարձնում է արդեն գոյություն ունեցող օբյեկտի հղումը:

    string str1 = "hello"; // "hello" ավելացվում է (կամ արդեն կա) պուլում
    string str2 = "hello"; // str2 հղում է նույն օբյեկտին, ինչ str1
    Console.WriteLine(ReferenceEquals(str1, str2)); // Կբերի True
    

    Սա հիշողության օպտիմիզացիա է:

  5. Մեծ թվով մեթոդներ: string դասը առաջարկում է հարուստ մեթոդների հավաքածու՝ տողերի մանիպուլյացիայի համար՝ որոնում, փոխարինում, ձևաչափում, վերածում մեծատառ կամ փոքրատառ, և շատ ավելին:

    string original = "  Hello, World!  ";
    string trimmed = original.Trim(); // Հեռացնում է եզրային բացատները
    string upper = original.ToUpper(); // Մեծատառ դարձնում
    bool contains = original.Contains("World"); // Ստուգում, պարունակում է արդյոք
    
  6. IEnumerable<char>-ի իրականացում: Տողը հիմնականում հավաքածու է նշանների, և այն իրականացնում է IEnumerable<char> ինտերֆեյսը, ինչը թույլ է տալիս անցնել նշաններով և օգտագործել LINQ:

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