作者NCRCD (光和影的谜题)
看板C_Sharp
标题Re: [问题] return的区域变数scope?
时间Wed Sep 14 01:51:35 2005
※ 引述《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
1F:推 tomex:我所说的「复制」指heap copy, not heap copy. 211.78.132.15 09/14
2F:推 tomex:笔误,stack copy, not heap copy. 211.78.132.15 09/14
3F:推 tomex:另,c#的==并不等於reference.equal喔! 211.78.132.15 09/14