Как устроен System.String ? - C#

Узнай цену своей работы

Формулировка задачи:

Всем привет. Подскажите что почитать про System.String. Статьи или книги где есть подробное описание. Конкретно интересует устройство внутреннего буфера, который собственно хранит символы. Буфер представлен не в виде явного массива или связного списка. Если смотреть исходный код System.String, можно увидеть поле private char m_firstChar; Получить символы System.String можно по адресу этого поля. Например, копия строки:
Листинг программы
  1. string text = string.FastAllocateString(length);
  2. fixed (char* ptr = &text.m_firstChar)
  3. {
  4. fixed (char* ptr2 = &str.m_firstChar)
  5. {
  6. string.wstrcpy(ptr, ptr2, length);
  7. }
  8. }
  9. return text;
Значит, при создании объекта System.String по адресу поля m_firstChar пишется массив символов ( или что-то) . Удивляет, что при этом нет реализации интерфейса IDisposable ... Как конкретно создаётся строка посмотреть нельзя, метод string.FastAllocateString(length); написан не на C#. Что бы почитать в этом направлении?

Решение задачи: «Как устроен System.String ?»

textual
Листинг программы
  1.    class Test
  2.         {
  3.             const int SIZE = 256;          
  4.             private char  ch;
  5.             private FixedBufferStruct fixedBufferStruct;
  6.  
  7.  
  8.             unsafe struct FixedBufferStruct
  9.             {          
  10.                 public fixed char buffer[SIZE];
  11.             }
  12.          
  13.  
  14.             public unsafe Test(string s)
  15.             {
  16.                 fixed (char* pch = &this.ch)
  17.                 {
  18.                     fixed (char* buffer = fixedBufferStruct.buffer)
  19.                     {
  20.                         Buffer.MemoryCopy(buffer, pch, SIZE, SIZE);
  21.                     }
  22.                 }
  23.  
  24.                 fixed (char* p = &this.ch)
  25.                 {
  26.                     for (int i = 0; i < s.Length; i++)
  27.                     {
  28.                         *(p + i) = s[i];
  29.                     }
  30.  
  31.                 }
  32.             }
  33.  
  34.  
  35.             public unsafe override string ToString()
  36.             {
  37.                 fixed (char* p = &this.ch)
  38.                 {
  39.                     return new string(p);
  40.                 }
  41.             }
  42.         }
  43.  
  44.        
  45.             static void Main(string[] args)
  46.             {
  47.                 Test test = new Test("Hello World!!!");
  48.                 Console.WriteLine(test.ToString());

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

11   голосов , оценка 3.818 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут