最近碰到一個(gè) 數(shù)組傳值和引用傳值的問(wèn)題,剛開(kāi)始自己還弄錯(cuò)了,突然想起很久以前一道類似的面試題
廢話不說(shuō),代碼整理如下:(具體詳解以后整理清楚再補(bǔ)上,以免造成誤解,同時(shí)望高手給出詳解)
class Value
{
public int i = 36;
}
class Program
{
static void Main(string[] args)
{
Program t = new Program();
t.first();
Console.Read();
}
public void first()
{
int i = 7;
Value v1 = new Value();
v1.i = 8;
second(ref v1, i);
Console.WriteLine(v1.i + " " + i + " ");
Value v2 = new Value();
v2.i = 8;
second(v2, i);
Console.WriteLine(v2.i + " " + i + " ");
}
public void second(ref Value v, int i)
{
i = 0;
v.i = 16;
Value val = new Value();
v = val;
Console.WriteLine(v.i + " " + i + " ");
}
public void second(Value v, int i)
{
i = 0;
v.i = 16;
Value val = new Value();
v = val;
Console.WriteLine(v.i + " " + i + " ");
}
}
運(yùn)行結(jié)果:
初步解答:
所有的方法參數(shù),如果不指定ref或者out,那就是按副本傳遞的。引用型傳遞的是地址的副本,值類型傳遞的是值的副本。
在Value val = new Value(); v = val; 之前,second方法內(nèi)和方法外都是指向同一個(gè)對(duì)象,所以改變對(duì)方法外有效。
在執(zhí)行Value val = new Value(); v = val;之后,second方法內(nèi)的v指向了一個(gè)新的對(duì)象,并不影響方法外的引用,所以之后的改變對(duì)方法外無(wú)效。
轉(zhuǎn)自
http://www.cnblogs.com/fengyao/archive/2010/03/24/1693453.html
posted on 2010-03-31 09:24
becket_zheng 閱讀(280)
評(píng)論(0) 編輯 收藏