Re: [問題] return的區域變數scope?
※ 引述《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
211.78.132.15 09/14, 1F
推
211.78.132.15 09/14, , 2F
211.78.132.15 09/14, 2F
推
211.78.132.15 09/14, , 3F
211.78.132.15 09/14, 3F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 5 之 5 篇):
C_Sharp 近期熱門文章
PTT數位生活區 即時熱門文章