值傳遞 spa
C#默認都是值傳遞的,就是複製變量的一個副本傳遞給方法,因此在退出方法後,對變量的修改無效。orm
可是要注意,當傳遞是引用類型時,由於引用類型是一個引用的地址,因此修改引用地址指向的對象時,同樣會修改對象的值,這種現象不能當作引用傳遞對象
引用傳遞blog
引用傳遞是對象自己傳遞給方法,當在方法中對對象作修改時,退出方法後修改是有效的,在C#中引用傳遞須要在參數類型前加關鍵字 ref ,可是ref 的參數變量在使用前必須被初使化,可有時經過引用傳遞的變量初值是沒意義的,這容易產生混淆,這時在C#中有另外一關鍵字 out ,out 與 ref 關鍵字使用時效果同樣,可是out關鍵字對變量能夠不初使化,可是out關鍵字的變量在方法中必須給分配一個值,不然編譯會不經過string
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= 20it
i=20編譯
j=20class