值傳遞
C#默認都是值傳遞的,就是復制變量的一個副本傳遞給方法,所以在退出方法后,對變量的修改無效。
但是要注意,當傳遞是引用類型時,因為引用類型是一個引用的地址,所以修改引用地址指向的對象時,一樣會修改對象的值,這種現象不能當做引用傳遞
引用傳遞
引用傳遞是對象本身傳遞給方法,當在方法中對對象做修改時,退出方法后修改是有效的,在C#中引用傳遞需要在參數類型前加關鍵字 ref ,但是ref 的參數變量在使用前必須被初使化,可有時通過引用傳遞的變量初值是沒意義的,這容易產生混淆,這時在C#中有另一關鍵字 out ,out 與 ref 關鍵字使用時效果一樣,但是out關鍵字對變量可以不初使化,但是out關鍵字的變量在方法中必須給分配一個值,否則編譯會不通過
class Program
{
static void Main(string[] args)
{
var v = new Values();
int i = 10;
int j;
Console.WriteLine(v.a);
Method.Update(v, ref i, out j);
Console.WriteLine(string.Format("v.a={0}", v.a));
Console.WriteLine(string.Format("i={0}", i));
Console.WriteLine(string.Format("j={0}", j));
Console.ReadKey();
}
}
public class Values
{
public int a = 10;
}
public class Method
{
public static void Update(Values v, ref int i, out int j)
{
v.a = 20;
i = 20;
j = 20;
}
}
輸出值:10
v.a= 20
i=20
j=20
