值傳遞
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