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

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

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

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

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

textual
Листинг программы
   class Test
        {
            const int SIZE = 256;          
            private char  ch;
            private FixedBufferStruct fixedBufferStruct;
 
 
            unsafe struct FixedBufferStruct
            {           
                public fixed char buffer[SIZE]; 
            }
          
 
            public unsafe Test(string s)
            {
                fixed (char* pch = &this.ch)
                {
                    fixed (char* buffer = fixedBufferStruct.buffer)
                    {
                        Buffer.MemoryCopy(buffer, pch, SIZE, SIZE);
                    }
                }
 
                fixed (char* p = &this.ch)
                {
                    for (int i = 0; i < s.Length; i++)
                    {
                        *(p + i) = s[i];
                    }
 
                }
            }
 
 
            public unsafe override string ToString()
            {
                fixed (char* p = &this.ch)
                {
                    return new string(p);
                }
            }
        }
 
        
            static void Main(string[] args)
            {
                Test test = new Test("Hello World!!!");
                Console.WriteLine(test.ToString());

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


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

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

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