Sobes.tech
Junior

Какви са характеристиките на класа string в C#?

sobes.tech AI

Отговор от AI

Класът string в C# има следните ключови характеристики:

  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" в купчината
    string c = "test"; // Ако низът "test" вече съществува в пулa от низове, 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);
    }