傳值 vs 傳址

2015年1月5日 星期一

常常會搞不太清楚傳值以及傳址的差異,就先來筆記一下,以免以後忘記 開懷大笑

範例如下:

static void Main(string[] args)
{
//參考型別傳值(兩個變數位址不同)
TestClass y = new TestClass();
TestClass r1 = ChangeByVal(y);
Console.WriteLine("r1和y指向同實體:" + (r1 == y).ToString());
//參考型別傳址(兩個變數位址相同)
TestClass r2 = ChangeByRef(ref y);
Console.WriteLine("r2和y指向同實體:" + (r2 == y).ToString());
Console.ReadLine();
}
private static TestClass ChangeByVal(TestClass y)
{
y = new TestClass();
return y;
}
private static TestClass ChangeByRef(ref TestClass y)
{
y = new TestClass();
return y;
}


結果如下:

image

 

補充:這張圖可以說明兩個的不同處

pass-by-reference-vs-pass-by-value-animation

0 意見: