Re: [問題] return的區域變數scope?

看板C_Sharp (C#)作者 (光和影的謎題)時間20年前 (2005/09/14 01:27), 編輯推噓3(300)
留言3則, 1人參與, 最新討論串5/5 (看更多)
※ 引述《tomex (tomex_ou)》之銘言: : ※ 引述《NCRCD (光和影的謎題)》之銘言: : : 2.在C#裡除了數值型別, 其他型別不加方法參數都是傳參考(包括string) : : 所以string接收時不會複制1份新的記憶體空間. : TextBox1.Text = "abc"; : string s = TextBox1.Text; // if不會複製,為何不同了呢? : s = "123"; // TextBox1.Text = "abc" 呃, 我不瞭解前面所說的不同是? 在第二行結束他們兩個都是參考指向同一個物件 -- 我自己寫了個簡易程式: class Test{ static void Main(string[] args){ string a,b="abc"; a=b; Console.WriteLine((object)a==(object)b); } } 出來的結果的確是"True" : string的指派都是會產生不同的記憶體空間 : 因此才會有StringBuilder等append()來增加效能的物件。 我想你弄錯了 之所以會有StringBuilder這種物件的確是為了增進效能 但原因不是指派string的關係, 而是改變string內容時效能低落的原因 而是因為每個string物件一生成就不會再變了 也就是說你new出來一個string叫str內容為"xyz" 而你對它做str=str+"abc"時會再生成一個新的string內容為"xyzabc"給str 所以才有StringBuilder 而至於指派時只是把參考傳過去, 真正物件還是只有一份 : 我倒是認為,c#無論傳遞什麼,都是採「複製」的方式 : 例如reference type的變數傳入method()當參數, : 是複製了一份ref變數,只是指向相同的位址 : 否則何需要創造ref/out等關鍵字呢? 我突然覺得我們的意思似乎是一樣的 你所說的"複製"就我說的"傳參考" 我說的"傳參考"就是把物件位置複製一次 是不是這樣 @@? -- 不過用你說的"複製"真的容易讓人誤會啊 orz 還是用"傳參考"比較不容易弄錯 @@" -- 智慧 是成功的任意門 信心 是成功的促進劑 機緣 是成功的必需品 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.113.141.225

211.78.132.15 09/14, , 1F
我所說的「複製」指heap copy, not heap copy.
211.78.132.15 09/14, 1F

211.78.132.15 09/14, , 2F
筆誤,stack copy, not heap copy.
211.78.132.15 09/14, 2F

211.78.132.15 09/14, , 3F
另,c#的==並不等於reference.equal喔!
211.78.132.15 09/14, 3F
文章代碼(AID): #139mlpH6 (C_Sharp)
文章代碼(AID): #139mlpH6 (C_Sharp)