在.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";
因此,显然将其从使用a更改string
为使用a char[]
。
编辑:更新了答案以反映.NET 4(我才刚刚发现)中的更改。