在c#中,使用方法得到返回值時,只能獲取一個返回值。當使用ref和out關鍵字後,能夠獲取多個返回值。c#
MSDN對ref和out關鍵字的說明以下:數組
ref 關鍵字: 使參數按引用傳遞。其效果是,當控制權傳遞迴調用方法時,在方法中對參數所作的任何更改都將反映在該變量中。若要使用 ref 參數,則方法定義和調用方法都必須顯式使用 ref 關鍵字。
out 關鍵字:會致使參數經過引用來傳遞。這與 ref 關鍵字相似,若要使用 out 參數,方法定義和調用方法都必須顯式使用 out 關鍵字。測試
它們的區別在於: ref 要求變量必須在傳遞以前進行初始化;而out不須要初始(或者初始化也不會影響到方法內部的值,因此你初始化沒用),須要在方法內部賦值或者初始化。spa
咱們用一個例子來測試一下ref和out關鍵字的使用。code
首先咱們定義一個方法,計算一個int數組中的和,最大值,最小值和平均值。blog
代碼以下:使用ref關鍵字string
1 public int GetIntResult(int[] arr,ref int max,ref int min,ref double avg) 2 { 3 int sum = 0; 4 max = arr[0]; 5 min = arr[0]; 6 for (int i = 0; i < arr.Length; i++) 7 { 8 sum += arr[i]; 9 10 if (max < arr[i]) max = arr[i]; 11 if (min > arr[i]) min = arr[i]; 12 13 14 } 15 avg = sum / arr.Length; 16 return sum; 17 }
在主方法中調用上面的方法代碼:it
咱們先測試當爲定義的變量不初始化時,程序會提示什麼錯誤呢?會系統使用了爲初始化的變量。因此說在使用ref關鍵字時,必須對變量初始化。提示錯誤以下圖:io
測試使用關鍵字ref的主方法代碼以下:class
1 int[] arry = new int[] {3,9,10,20,50,2,23,30 }; 2 int max=0; 3 int min=0; 4 double avg=0 ; 5 Test test = new Test(); 6 int sum = test.GetIntResult(arry,ref max,ref min,ref avg);//調用時也須要使用關鍵字 7 Console.WriteLine($"sum:{sum} max:{max} min:{min} avg:{avg}");
運行程序,測試結果:
使用out關鍵字,跟測試ref關鍵字相同。
1 int[] arry = new int[] { 3, 9, 10, 20, 50, 2, 23, 30 }; 2 int max=1;////在使用out關鍵字時,不須要在此處初始化,初始化也不會影響到方法內部的值,因此你初始化沒用 3 int min=3; 4 double avg=4; 5 Test test = new Test(); 6 int sum = test.GetIntResult(arry, out max, out min, out avg);//調用時也須要使用關鍵字 7 Console.WriteLine($"sum:{sum} max:{max} min:{min} avg:{avg}");
測試結果跟上面。
咱們來繼續同時使用ref和out關鍵字測試。代碼以下:
1 public string GetStringResult(string code,ref string name,out int age) 2 { 3 age = 18; // 4 //deSomething.......... 5 return code; 6 }
主方法調用測試上面方法代碼以下:
1 string code = "x9527"; 2 string name = "詹姆斯邦德"; 3 int age = 99;//咱們在這裏賦值,等運行的時候看看.....會輸出什麼 4 Test test = new Test(); 5 string strCode= test.GetStringResult(code,ref name,out age); 6 Console.WriteLine($"name={name} code={code} age={age}");
測試運行結果: