[英]C# How StringBuilder is mutable?
我試圖找到一個帖子,它應該解釋 append 函數是如何為 StringBuilder 工作的。
我通過了這個答案。
現在,String 是不可變的。 我明白了。
但是,每當我們嘗試向其添加某些內容時,StringBuilder 也會初始化一個新的臨時字符數組。
可變並不意味着它不能創建新的東西。 可變只是意味着它的狀態可以在構造函數返回后改變。
例如,這是可變的,即使string
是不可變的:
class Foo {
public string Bar { get; set; }
public void FooMethod() {
Bar = new string('!', 10);
}
}
因為我們可以通過設置Bar
或調用FooMethod
來改變它的狀態:
someFoo.FooMethod();
是的,我正在FooMethod
創建一個新string
,但這並不重要。 重要的是Bar
現在有了新的價值! someFoo
的狀態發生了變化。
我們說StringBuilder
是可變的,因為它的狀態可以改變,而無需創建新的StringBuilder
。 如您StringBuilder
, StringBuilder
存儲一個字符數組。 每次追加內容時,該字符數組都會更改為其他內容,但不會創建新的StringBuilder
。 這是StringBuilder
可變的有力證明。
*Builder
模式是創建對象的常用模式,尤其是不可變對象,它使用比簡單地在構造函數中傳入一堆數據更豐富的接口。 等級之間的關系X
和一類XBuilder
通常是不可變的X
和XBuilder
,可以建立一個X. XBuilder
不必是一成不變的,因為它不是實際的數據類型,你最終需要的,它只是一個臨時的腳手架構建X
。
換句話說, StringBuilder
不是string
的可變版本。 它是一個類,一個功能單元,用於幫助您創建一個不可變的string
。 您實例化一個StringBuilder
,使用其各種Append
方法來定義最終字符串中應包含的內容(邏輯上尚不存在),然后在完成后調用myStringBuilder.ToString()
(其中,我認為,應該被稱為BuildString()
),以獲得您想要的實際字符串。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.