C#知識:函數簡介及函數重載
本文主要介紹函數參數和函數重載相關的知識點
1、函數
-
函數一般寫在類中
-
一般函數調用
static int Add(int num, int value){num += value;return num;}
//一般函數調用,發生值類型參數的復制int num = 1;Add(num, 1); //調用 Add(int num, int value)Console.WriteLine(num); //1
2、ref和out
2.1 ref
- 必須初始化,它變我也變
- 類似C++中的引用,不需要在被調用函數中賦值
- ref函數形參不能有默認值
static int Add(ref int num, int value){num += value;return num;}
int num2 = 1;Add(ref num2, 1); //調用 Add(ref int num, int value)Console.WriteLine(num2); //2
2.2 out
- 可以不初始化,它變我也變
- 需要在被調用函數中賦值
- out函數形參不能有默認值
static int Add2(out int num, int value){num = 100;num += value; return num;}
int num3 = 2; //這個賦值沒啥子用,在被調用函數值又會重新賦值Add2(out num3, 2); //調用 Add2(out int num, int value)Console.WriteLine(num3); //102
3、params變長參數
- 在函數調用時,可以傳入多個相同類型的實參
- 只能有一個形參為params類型,且必須是最后一個
static int Add(int num, params int[] values){foreach (int value in values) { num += value;}return num;}
int num4 = Add(0, 1, 2, 3); //調用 Add(int num, params int[] values)Console.WriteLine(num4); //6
4、默認參數
- 可以為多個形參設置默認值,但是有默認值的形參后面所有形參必須都有默認值
static int Add3(int num, int value = 1){num += value;return num;}
int num5 = Add3(20); //調用 Add3(int num, int value = 1)Console.WriteLine(num5); //21
5、函數重載
- 方法簽名不同(參數類型或參數個數不同)的同名函數構成重載
- ref int 或者out int 可以和 int 構成重載
- ref 與 out 不存在重載
- params int[]可以和 int 構成重載
- params int[] 不能與 int[] 構成重載
- 默認值不構成重載
static int Add(int num, int value){num += value;return num;}//ref int 可以和 int 構成重載static int Add(ref int num, int value){num += value;return num;}//ref 與 out 不存在重載//static int Add(out int num, int value)//{// num += value;// return num;//}static int Add2(out int num, int value){num = 100;num += value; return num;}// params int[]可以和 int 構成重載static int Add(int num, params int[] values){foreach (int value in values) { num += value;}return num;}//params int[] 不能與 int[] 構成重載//static int Add(int num, int[] values)//{// foreach(int value in values)// {// num += value;// }// return num;//}//默認值不構成重載//static int Add(int num , int value = 1)//{// num += value;// return num;//}static int Add3(int num, int value = 1){num += value;return num;}
6、完整代碼示例:
namespace FunctionOverloading
{internal class Program{static int Add(int num, int value){num += value;return num;}//ref int 可以和 int 構成重載static int Add(ref int num, int value){num += value;return num;}//ref 與 out 不存在重載//static int Add(out int num, int value)//{// num += value;// return num;//}static int Add2(out int num, int value){num = 100;num += value; return num;}// params int[]可以和 int 構成重載static int Add(int num, params int[] values){foreach (int value in values) { num += value;}return num;}//params int[] 不能與 int[] 構成重載//static int Add(int num, int[] values)//{// foreach(int value in values)// {// num += value;// }// return num;//}//默認值不構成重載//static int Add(int num , int value = 1)//{// num += value;// return num;//}static int Add3(int num, int value = 1){num += value;return num;}static void Main(string[] args){//函數一般寫在類中//一般函數調用,發生值類型參數的復制int num = 1;Add(num, 1); //調用 Add(int num, int value)Console.WriteLine(num); //1//ref和out//ref//必須初始化,它變我也變//類似C++中的引用,不需要在被調用函數中賦值//ref函數形參不能有默認值int num2 = 1;Add(ref num2, 1); //調用 Add(ref int num, int value)Console.WriteLine(num2); //2//out//可以不初始化,它變我也變//需要在被調用函數中賦值//out函數形參不能有默認值int num3 = 2; //這個賦值沒啥子用,在被調用函數值又會重新賦值Add2(out num3, 2); //調用 Add2(out int num, int value)Console.WriteLine(num3); //102//params變長參數//在函數調用時,可以傳入多個相同類型的實參//只能有一個形參為params類型,且必須是最后一個int num4 = Add(0, 1, 2, 3); //調用 Add(int num, params int[] values)Console.WriteLine(num4); //6//默認參數//可以為多個形參設置默認值,但是有默認值的形參后面所有形參必須都有默認值int num5 = Add3(20); //調用 Add3(int num, int value = 1)Console.WriteLine(num5); //21}}
}
7、參考資料
- 《唐老獅C#基礎》
本篇結束,感謝您的閱讀~