我试图找出一篇文章,该文章应该解释为StringBuilder准确添加函数的方法。
我遇到了这个answer.
现在,String是不可变的。我明白了。
但是,每当我们尝试向它添加内容时,StringBuilder也会初始化一个新的临时字符数组。
答案 0 :(得分:1)
Mutable并不意味着它无法创造新东西。 Mutable只意味着它的状态可以在构造函数返回后改变。
例如,这是可变的,即使string
是不可变的:
class Foo {
public string Bar { get; set; }
public void FooMethod() {
Bar = new string('!', 10);
}
}
因为我们可以通过设置Bar
或致电FooMethod
来更改其状态:
someFoo.FooMethod();
是的,我在string
创建了一个新的FooMethod
,但这并不重要。重要的是Bar
现在有了新的价值!状态someFoo
已更改。
我们说StringBuilder
是可变的,因为它的状态可以改变,而不会创建新的StringBuilder
。正如您查找的那样,StringBuilder
存储了一个char数组。每次附加某些内容时,该char数组都会更改为其他内容,但不会创建新的StringBuilder
。这是StringBuilder
可变的可靠证据。
答案 1 :(得分:-1)
*Builder
模式是创建对象(尤其是不可变对象)的常用模式,使用更丰富的接口而不是简单地在构造函数中传递一堆数据。类X
和类XBuilder
之间的关系通常是不可变的X
和XBuilder
,它们可以构建 X. {{1不需要是不可变的,因为它不是你最终需要的实际数据类型,它只是构建XBuilder
的临时支架。
换句话说,X
不是StringBuilder
的可变版本。它是一个类,一个功能单元,用于帮助您创建不可变的string
。您实例化string
,使用其各种StringBuilder
方法来定义最终字符串中的内容(逻辑上不存在),然后,当您完成时,调用{ {1}}(我认为应该称之为Append
),以获取您想要的实际字符串。