最近碰到一個 數組傳值和引用傳值的問題,剛開始自己還弄錯了,突然想起很久以前一道類似的面試題
廢話不說,代碼整理如下:(具體詳解以后整理清楚再補上,以免造成誤解,同時望高手給出詳解)
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 + " ");
}
}
運行結果:
初步解答:
所有的方法參數,如果不指定ref或者out,那就是按副本傳遞的。引用型傳遞的是地址的副本,值類型傳遞的是值的副本。
在Value val = new Value(); v = val; 之前,second方法內和方法外都是指向同一個對象,所以改變對方法外有效。
在執行Value val = new Value(); v = val;之后,second方法內的v指向了一個新的對象,并不影響方法外的引用,所以之后的改變對方法外無效。
轉自
http://www.cnblogs.com/fengyao/archive/2010/03/24/1693453.html
posted on 2010-03-31 09:24
becket_zheng 閱讀(279)
評論(0) 編輯 收藏