c#中的ref、out、params參數

out參數
與c++的引用的對比
out參數能夠用來傳遞方法返回值,與c++中的引用有點像,可是還有有些不一樣:
- 調用方法的時候必須寫out參數
- 調用方法以前必須先分配空間
- 調用方法以前不用先賦值.
- 必須在方法內部對out參數賦值;c++

下面本身實現一個tryparse函數數組

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 using System.Threading.Tasks;
 6 
 7 namespace out參數
 8 {
 9     class Program
10     {
11         public struct Mid 
12         {
13             public int[] _num;
14             public string _name;
15         }
16         static void Main(string[] args)
17         {
18             //寫一個方法,求一個數組中的最大值、最小值、總和、平均值。
19             int[] numbers = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
20             //將要返回的四個值,放到一個數組裏返回;可是問題是數組是一組相同類型的數據,因此才能放到一個數組裏面。
21             //若是不一樣類型的話,只能從參數返回了.這時候又能夠用結構封裝起來返回;可是這個結構不必定是有意義的,同時是須要作後續操做的.
22            // Mid mid = GetMaxMinSumAvg(numbers);
23            // Console.WriteLine("名字是{0}",mid._name);
24             int max, min, sum;
25             double avg;
26             GetTest(numbers, out max, out min, out sum,out avg);
27             Console.WriteLine("最大值是{0},最小值是{1},總和爲{2},平均值爲{3}",max,min,sum,avg);
28             Console.ReadKey();
29 
30         }
31 
32         /// <summary>
33         /// 計算一個整數數組的最大值,最小值,平均值,總和,平均值;
34         /// </summary>
35         /// <param name="nums">須要計算的那個數組</param>
36         /// <param name="max">多餘返回的最大值</param>
37         /// <param name="min">多餘返回的最小值</param>
38         /// <param name="sum">對於返回的總和</param>
39         /// <param name="avg">多餘返回的平均值</param>
40         public static void GetTest(int []nums,out int max,out int min,out int sum,out double avg)
41         {
42             //必須在方法內部對out參數賦值;
43             max = nums[0];
44             min = nums[0];
45             sum = nums[0];
46             for (int i = 1; i < nums.Length; i++)
47             {
48                 if (nums[i]>max)
49                 {
50                     max = nums[i];
51                 }
52                 if (nums[i]<min)
53                 {
54                     min = nums[i];
55                 }
56                 sum += nums[i];
57             }
58             avg = sum * 0.1 / nums.Length;
59 
60         }
61         /// <summary>
62         /// 本身實現一個int型的TryParse()函數;
63         /// </summary>
64         /// <param name="str"></param>
65         /// <param name="num"></param>
66         /// <returns></returns>
67         public static bool MyTryParse(string str,out int num)
68         {
69             try
70             {
71                 num = int.Parse(str);
72             }
73             catch (OverflowException)
74             {
75 
76                 num = 0;
77                 return false;
78             }
79             return true;
80         }
81     }
82 }

 

ref參數
ref就至關於c++中的引用;比out要更像一點,看它就像是reference的縮寫;函數

注意三點:
- 在調用方法前必定要賦值;
- 調用時必定要寫ref;
- 必定要構造空間
下面寫一個交換兩個變量內容的操做:spa

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 using System.Threading.Tasks;
 6 
 7 //ref就至關於c++中的引用;比out要更像一點,out專一返回20年;
 8 namespace ref參數
 9 {
10     class Program
11     {
12         static void Main(string[] args)
13         {
14             int n1 = 10;
15             int n2 = 20;
16             //注意兩點;在調用方法前必定要賦值;必定要寫ref;必定要構造空間
17             Exchange(ref n1, ref n2);
18             Console.WriteLine("交換後,第一個變量是{0},第二個參數是{1}",n1,n2);
19             Console.ReadKey();
20 
21         }
22         /// <summary>
23         /// 交換兩個變量
24         /// </summary>
25         /// <param name="n1">第一個變量</param>
26         /// <param name="n2">第二個變量</param>
27         public static void Exchange(ref int n1,ref int n2)
28         {
29             n1 = n1 - n2;
30             n2 = n1 + n2;
31             n1 = n2 - n1;
32         }
33     }
34 }

 

params參數
params是可變類型參數,可是它與c++中的變長參數又有不一樣:
- 將實參列表中跟可變參數數組類型一致的元素都當作數組的元素去處理。
- params可變參數必須是形參列表中的最後一個元素。
- 惟一性:在一個函數裏,只能有一個params可變參數
- 調用時有兩種傳遞方式:數組和直接數據傳;code

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 using System.Threading.Tasks;
 6 
 7 namespace Params參數
 8 {
 9     class Program
10     {
11         static void Main(string[] args)
12         {
13             int [] a={1,2,3};
14             Test("呵呵",a);
15         }
16         public static void Test(string name,params int[] par)
17         {
18 
19         }
20     }
21 }
22 
23 /*
24  * param可變參數 能夠沒有
25  * 惟一性
26  * 最後性
27  * 兩種傳遞方式
28  * 求任意長度數組的最大值;
29  * 
30  */
相關文章
相關標籤/搜索