一、值參數:在使用參數時,是把一個值傳遞給函數使用的一個變量。對函數中此變量的任何修改都不會影響函數調用中指定的參數。(由於函數只有一個返回值,不能用作參數的多個變量值)。
二、引用參數:即函數處理的變量與函數調用中使用的變量相同,而不僅僅是值相同的變量。因此,對這個變量的任何改變都會影響用作參數的變量值。需用ref關鍵字指定參數。用作ref參數的變量有兩個限制,由於函數可能會改變引用參數的值,所有必須在函數調用中使用“非常量”變量。其次,必須使用初始化過的變量。
三、輸出參數:out關鍵字,指定所給定的參數是一個輸出參數。Out關鍵字的使用方式與ref關鍵字相同,實際上,他的執行方式與引用參數完全一樣,因為在函數執行完畢后,該參數的值將返回給函數調用中使用的變量。
四、引用參數和輸出參數的一些重要區別:
- 把未賦值的變量用作ref參數是非法的,但可以把未賦值的變量用作out參數。
- 另外,在函數使用out參數時,必須把它看成是尚未賦值。即調用代碼可以把已賦值的變量用作out參數,但存儲在該變量中的值會在函數執行時丟失。
下面通過三個方法分別對三種參數傳遞進行說明:
static void AMethod(int i)//值傳遞 { i = i + 1; } static void BMethod(ref int i)//引用傳遞 { i = i + 1; } static void CMethod(out int i, out string j)//輸出傳遞 { i = 6;//輸出參數函數必須在函數內部進行初始化賦值 j = "return"; } static void Main(string[] args) { int i = 1; string j = "C#";//輸出參數賦值 AMethod(i);//調用值傳遞函數 Console.WriteLine("(1)、 i=1;經過AMethod方法(加1),值傳遞之后 i=" + i); Console.WriteLine(); BMethod(ref i);//調用引用傳遞函數 Console.WriteLine("(2)、 i=1;經過BMethod方法(加1),ref傳遞之后 i=" + i); Console.WriteLine(); CMethod(out i, out j);//調用輸出傳遞函數 Console.Write("(3)、 i=1;經過CMethod方法(加1),out傳遞之后 "); Console.WriteLine("i=" + i + " j=" + j); Console.WriteLine(); Console.ReadKey(); }
結果如下顯示: