C#-函数:ref和out、变长参数、可选参数、函数重载

函数的主要作用
  1. 封装代码

  2. 提升代码复用率

  3. 抽象行为

函数可写在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的区别
  1. ref传入的变量必须初始化,在内部 可改可不改。out不用

  2. 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;
}

使用时注意:

  1. params后面必为数组(可为任意类型)

  2. params最多出现一个,并放置最后

参数数组和数组参数的区别

参数数组==变长参数

数组参数==static int Add1(int[] array){ }

四:可选参数(参数有默认值)

当调用函数时可以不传入参数,不传就会使用默认值作为参数的值

static void Speak2(string a, string test, string name = "小明"){}
使用时注意
  1. 每个参数都可以有默认值

  2. 若混用,可选参数,必须写在普通参数后面

五:函数重载

方法名相同,参数必不同(种类、数量、顺序),返回值不做要求

  1. 命名一组功能相似的函数,减少函数名的数量,避免命名空间的污染
  2. 提升程序可读性
  3. 一般用来处理不同参数的同一类型的逻辑处理→调用时,程序会自动判断
// 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;
}
上一篇:css实现antd丝带效果


下一篇:STM32 第22章 常用存储器介绍