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#基础》
本篇结束,感谢您的阅读~