gpt4 book ai didi

c# - StringBuilder 类是如何实现的?每次我们附加时它是否在内部创建新的字符串对象?

转载 作者:IT王子 更新时间:2023-10-29 03:49:57 26 4
gpt4 key购买 nike

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";

很明显,它已从使用 string 更改为使用 char[]

编辑:更新的答案以反射(reflect) .NET 4 中的变化(我刚刚发现)。

关于c# - StringBuilder 类是如何实现的?每次我们附加时它是否在内部创建新的字符串对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3564906/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com