Как устроен System.String ? - C#
Формулировка задачи:
Всем привет.
Подскажите что почитать про System.String. Статьи или книги где есть подробное описание.
Конкретно интересует устройство внутреннего буфера, который собственно хранит символы.
Буфер представлен не в виде явного массива или связного списка.
Если смотреть исходный код System.String, можно увидеть поле
private char m_firstChar;
Получить символы System.String можно по адресу этого поля.
Например, копия строки:
Значит, при создании объекта System.String по адресу
поля m_firstChar
пишется массив символов ( или что-то) .
Удивляет, что при этом нет реализации интерфейса IDisposable ...
Как конкретно создаётся строка посмотреть нельзя,
метод string.FastAllocateString(length); написан не на C#.
Что бы почитать в этом направлении?
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 ?»
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());
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д