20250528-C#知识:函数简介及函数重载
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#基础》
本篇结束,感谢您的阅读~