C#传递参数
與函數交換數據的最好方式就是傳遞參數,在C#中有四種方法來控制參數如何傳遞給目標方法
C#中的參數修飾符
| 無修飾 | 如果一個參數沒有用參數修飾符,則認為它將按值傳遞 |
| out | 輸出參數由被調用的方法賦值。因此它按引用傳遞 |
| ref | 調用者賦初值,并且可以由被調用的方法可選地重新賦值,因此數據也是按照引用傳遞的 |
| params | 將一組可變數據的參數作為單獨的邏輯參數進行傳遞 |
下面來一一介紹
默認傳參
static int Multiply(int a, int b){int ans = a * b;a = 100;b = 315;return ans;}在主函數中進行調用
static void Main(string[] args){Console.WriteLine("**********默認傳參行為********\n");int a = 19, b = 25; Console.WriteLine("調用之前的:a={0},b={1}", a, b);Console.WriteLine("調用函數的結果:{0}", Multiply(a, b)); Console.WriteLine("調用之后的: a={0},b={1}", a, b);Console.WriteLine();Console.ReadKey();}輸出結果:
通過輸出結果可知:a和b的值,在調用函數Multiply(int a, int b) 前后的值保持不變,雖然在Multiply(int a, int b)函數內部試圖修改a和b的值,但實際上修改的只是a,b值的副本;a,b原來的值不變
輸出參數out
out修飾,即定義為輸出參數,當定義為輸出參數時,必須在退出方法之前給參數一個恰當的值,否則會產生編譯錯誤
以下是帶out參數的方法
static void FunWithOut(int x,int y,out int ans){ans = x + y;}調用一個帶有輸出參數的方法,也必須是用out修飾符。需要注意的是:作為輸出變量的本地變量不需要賦值,否則原來的值會丟失
FunWithOut(110, 120, out ans);Console.WriteLine("110+120={0}", ans);Console.ReadKey();
我們知道使用return 一次只能返回一個返回值,而使用out參數則可以通過一次調用,獲取多個返回值
例如:
static void ReturnValues(out int a,out int b,out string c,out bool d){a = 120;b = 119;c = "This is a demo";d = false;}Console.WriteLine("**********帶有out參數,輸出多個值********\n");int a; int b; string c; bool d;ReturnValues(out a, out b, out c, out d);Console.WriteLine("輸出結果:\n a={0}\n b={1}\n c={2}\n d={3}\n",a,b,c,d);Console.ReadKey();引用參數ref
引用參數,可以對調用者作用域中聲明的不同數據進行操作。比如可以用引用參數來實現排序和交換等操作
下面是交換兩個值的實例:
public static void SwapValues(ref int a,ref int b){int temp = a;a = b;b = temp;} 調用函數 static void Main(string[] args){Console.WriteLine("**********帶有ref參數********\n");int a = 123;int b = 456;Console.WriteLine("調用之前的:a={0} b={1}", a, b);SwapValues(ref a, ref b);Console.WriteLine("調用之后的:a={0} b={1}", a, b);Console.ReadKey();}參數數組params
使用params修飾符可以把相同類型可變數量的參數作為一個邏輯參數傳遞給方法,比如下面的函數,可以接收任意個int類型的數,并且返回它的平均值
static int ReturnAverage(params int[] values){Console.WriteLine("參數數組的長度{0}", values.Length);int sum = 0;if(values.Length==0){return sum;}for(int i=0;i<values.Length;i++){sum += values[i];}return (sum / values.Length);} static void Main(string[] args){Console.WriteLine("**********帶params的參數數組********\n");int average;Console.WriteLine("**********用列表調用********\n");average = ReturnAverage(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);Console.WriteLine("傳入參數的平均值為{0}", average);Console.WriteLine("**********用數組調用********\n");int[] data = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };Console.WriteLine("傳入參數的平均值為{0}", ReturnAverage(data));Console.ReadKey();}C#語言中,要求方法只能有一個params參數修飾符可選參數
可選參數允許我們對傳入的參數提供默認值,可選參數必須放在參數列表的最后 class Program{static void EnterLogData(string message,string owner="Programer"){Console.Beep();Console.WriteLine("Error:{0}", message);Console.WriteLine("Owner of Error:{0}", owner);}static void Main(string[] args){//調用含可選參數的函數EnterLogData("Oh no ! Grid can't find data ");EnterLogData("Oh no ! I can't find the payroll data", "CFO");Console.ReadKey();}}在上面的兩次調用中: 第一次調用中,沒有顯式指定第二個string的值,第二個參數采用默認值即"Programer" 第二次調用中,顯式指定了owner的值為"CFO"
需要注意的是可選參數的值必須在編譯時就確定好,而不能再運行時,才確定
命名參數
轉載于:https://www.cnblogs.com/tao-zi/p/3832580.html
總結
- 上一篇: OpenCV2马拉松第22圈——Houg
- 下一篇: Split字符串分割函数