В .NET 2.0 он использует класс String
для внутреннего использования.String
является неизменным только за пределами пространства имен System
, поэтому StringBuilder
может сделать это.
В .NET 4.0 String
был изменен для использования char[]
.
В 2.0 StringBuilder
выглядело так
public sealed class StringBuilder : ISerializable
{
// Fields
private const string CapacityField = "Capacity";
internal const int DefaultCapacity = 0x10;
internal IntPtr m_currentThread;
internal int m_MaxCapacity;
internal volatile string m_StringValue; // HERE ----------------------
private const string MaxCapacityField = "m_MaxCapacity";
private const string StringValueField = "m_StringValue";
private const string ThreadIDField = "m_currentThread";
Но в 4.0 это выглядело так:
public sealed class StringBuilder : ISerializable
{
// Fields
private const string CapacityField = "Capacity";
internal const int DefaultCapacity = 0x10;
internal char[] m_ChunkChars; // HERE --------------------------------
internal int m_ChunkLength;
internal int m_ChunkOffset;
internal StringBuilder m_ChunkPrevious;
internal int m_MaxCapacity;
private const string MaxCapacityField = "m_MaxCapacity";
internal const int MaxChunkSize = 0x1f40;
private const string StringValueField = "m_StringValue";
private const string ThreadIDField = "m_currentThread";
Итак, очевидно, это было изменено с использованием string
к использованию char[]
.
EDIT: обновленный ответ для отражения изменений в .NET 4 (которые я только что обнаружил).