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