您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

StringBuilder类如何实现?每次我们追加时,它在内部创建新的字符串对象吗?

StringBuilder类如何实现?每次我们追加时,它在内部创建新的字符串对象吗?

在.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(我才刚刚发现)中的更改。

其他 2022/1/1 18:16:45 有690人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶