函数的主要作用
-
封装代码
-
提升代码复用率
-
抽象行为
函数可写在class,struct语句块中
return可以提前结束函数逻辑。程序是线性执行的,从上到下
一:有多个返回值需利用数组接收
// 传入两个数 然后计算两个数的和 以及他们两的平均数 得出结果返回出来
// 函数的返回值 一定是一个类型 只能是一个内容
//1 2 3 4
static int[] Calc(int a, int b)
{
int sum = a + b;
int avg = sum / 2;
// 如果用数组作为返回值出去 那么前提是 使用者 知道这个数组的规则
return new int[] { sum, avg};
}
如果用数组作为返回值,前提是,使用者知道这个数组的规则
二:ref和out
函数参数的修饰符
应用:解决在函数内部改变外部传入的内容,里面变了,外面也要变。
2.1 ref和out的使用
确保参数在内部修改后,外部也被修改
当传入的值类型参数在内部修改时,或者引用类型参数在内部重新声明时,外部的值会发生变化
注意:ref和out可以理解为一种变量类型,两者不能同时出现
static void ChangeValueRef(ref int value)
{
//out传入的变量必须在内部赋值 ref不用
value = 3;
}
//out
static void ChangeArrayOut(out int[] arr)
{
arr = new int[] { 999, 888, 777 };
}
------------------------------
调用函数
int i = 100;//ref 传入的变量必须初始化
ChangeValueRef(ref i)
2.2 ref和out的区别
-
ref传入的变量必须初始化,在内部 可改可不改。out不用
-
out传入的变量不用初始化,但是在内部必须修改该值(必须赋值)。ref不用
static bool CheckLogin(string name, string passWord, ref string info){
if( name == "admin" ){
if( passWord == "8888" ){
info = "登录成功";
}
else{
info = "密码错误";
return false;
}
}
else{
info = "用户名错误";
return false;
}
return true;
}
三:变长参数-params
关键字:params
params int[ ]
意味着可以传入n个int参数(必是同类型的),n可以等于0,传入的参数会存在arr数组中.
static int Sum(params int[] arr){
int sum = 0;
for (int i = 0; i < arr.Length; i++){
sum += arr[i];
}
return sum;
}
使用时注意:
-
params后面必为数组(可为任意类型)
-
params最多出现一个,并放置最后
参数数组和数组参数的区别
参数数组==变长参数
数组参数==static int Add1(int[] array){ }
四:可选参数(参数有默认值)
当调用函数时可以不传入参数,不传就会使用默认值作为参数的值
static void Speak2(string a, string test, string name = "小明"){}
使用时注意
-
每个参数都可以有默认值
-
若混用,可选参数,必须写在普通参数后面
五:函数重载
方法名相同,参数必不同(种类、数量、顺序),返回值不做要求
- 命名一组功能相似的函数,减少函数名的数量,避免命名空间的污染
- 提升程序可读性
- 一般用来处理不同参数的同一类型的逻辑处理→调用时,程序会自动判断
// ref和out 可以理解成 他们也是一种变量类型 所以可以用在重载中 但是 ref和out不能同时修饰
static float CalcSum(ref float f, int a){
return f + a;
}
static float CalcSum(int a, int b, params int[] arr){
return 1;
}