c#中ref和out使用及區別

在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}");

測試運行結果:

相關文章
相關標籤/搜索