C# 函數


參數數組:

C#允許為函數指定一個(只能指定一個)特殊參數,這個參數必須是函數定義中的最后一個參數,稱為參數數組。參數數組允許使用個數不定的參數調用函數,可使用params關鍵字定義它們。

參數數組可以簡化代碼,因為在調用代碼中不必傳遞數組,而是傳遞同類型的幾個參數,這些參數會放在可在函數中使用的一個數組中。

定義舒勇參數數組的函數時,需要使用下列代碼:

static <returnType> <FunctionName>(<p1Type> <p1Name>, ..., params <type>[] <name>) {   ...   return <returnValue>; }

使用下面的代碼可以調用該函數:

<FunctionName>(<p1>, ..., <val1>, <val2>, ...)

其中<val1>和<val2>等都是<type>類型的值,用於初始化<name>數組,可以指定的參數個數幾乎不受限制,但他們都必須是<type>類型。甚至根本不必指定參數。

下面的示例定義並使用帶有params類型參數的函數:

class Program { static void Main(string[] args) { int sum = GetVal(1, 2, 5, 7, 9); Console.WriteLine($"總和為:{sum}"); } /// <summary>
        /// 求和 /// </summary>
        /// <param name="vals">可以用任意數量的int參數,但不接受其他類型</param>
        /// <returns></returns>
        public static int GetVal(params int[] vals) { int checkVal = 0 ; foreach (int item in vals) { checkVal += item; } return checkVal; } } 

 引用參數:

/// <summary>
/// 使用ref關鍵字指定參數 /// </summary>
/// <param name="val"></param>
public static void GetVal(ref int val) { val *= 2; Console.WriteLine($"val的值:{val}"); } int num = 5; Console.WriteLine($"num為:{num}"); //在函數調用中再次指定它(這是必需的)
GetVal(ref num); Console.WriteLine($"num為:{num}");

輸出結果:

用作ref參數的變量有兩個限制。首先,函數可能會改變引用參數的值,所以必須在函數調用中使用“非常量”變量。所以,下面代碼是非法的:

 其次,必須使用初始化過的變量。C#不允許假定ref參數在使用它的函數中初始化,下面代碼也是非法的:

 輸出參數:

        /// <summary>
        /// 獲取數組中最大值的元素索引 /// 如果數組中有多個元素的值都是這個最大值,只提取第一個最大值的索引 /// </summary>
        /// <param name="val"></param>
        public static int MaxVal(int[] intArray, out int maxIndex) { int maxVal = intArray[0]; maxIndex = 0; for (int i = 1; i < intArray.Length; i++) { if (intArray[i] > maxVal) { maxVal = intArray[i]; maxIndex = i; } } return maxVal; } int[] myArray = { 1, 8, 3, 9, 2, 5, 9, 3, 0, 2 }; int maxIndex; Console.WriteLine($"myArray中的最大值為:{MaxVal(myArray, out maxIndex)}"); Console.WriteLine($"第一個最大值的索引為:{maxIndex + 1}");

輸出結果:

 ref和out的重要區別:

1. 把未賦值的變量用作ref參數是非法的,但可以把未賦值的變量用作out參數

2. 在函數使用out參數時,必須把它看成尚未賦值。即調用代碼可以把已賦值的變量用作out參數,但存儲在該變量中的值會在函數執行時丟失

3. out適合用在需要retrun多個返回值的地方,而ref則用在需要被調用的方法修改調用者的引用的時候

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM