簡體   English   中英

C# StringBuilder 是如何可變的?

[英]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 如您StringBuilderStringBuilder存儲一個字符數組。 每次追加內容時,該字符數組都會更改為其他內容,但不會創建新的StringBuilder 這是StringBuilder可變的有力證明。

*Builder模式是創建對象的常用模式,尤其是不可變對象,它使用比簡單地在構造函數中傳入一堆數據更豐富的接口。 等級之間的關系X和一類XBuilder通常是不可變的XXBuilder ,可以建立一個X. XBuilder不必是一成不變的,因為它不是實際的數據類型,你最終需要的,它只是一個臨時的腳手架構建X

換句話說, StringBuilder不是string的可變版本。 它是一個類,一個功能單元,用於幫助您創建一個不可變的string 您實例化一個StringBuilder ,使用其各種Append方法來定義最終字符串中應包含的內容(邏輯上尚不存在),然后在完成后調用myStringBuilder.ToString() (其中,我認為,應該被稱為BuildString() ),以獲得您想要的實際字符串。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM