博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C# 中out,ref,params参数的使用
阅读量:6340 次
发布时间:2019-06-22

本文共 2267 字,大约阅读时间需要 7 分钟。

C#中有三个高级参数,分别是out,ref,params:
 
1、out参数
  • 方法使用return 只能返回一个值(一个数值或一个指针值),out参数可以帮助我们在一个方法中返回多个值不限类型
  • 在使用out参数的时候需要注意
    • 在调用方法之前,对out参数传递的变量只需声明,可以赋值也可以不赋值,赋值也会在方法中被覆盖掉。
    • 方法使用了out参数传递变量时,就是要返回值,所以必须在方法内为其赋值
    • 方法的参数使用out关键字修饰时,在调用该方法时,也要在out参数传递的变量前面加上out关键字才行。
static void Main(string[] args){  // 使用out参数返回一个数组的最大值、最小值  int[] nums = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };  int max;  int min;  GetMaxMinSumAvg(nums, out  max, out min);  Console.WriteLine(max);  Console.WriteLine(min);  Console.ReadKey();} public static void GetMaxMinSumAvg(int[] nums, out int max, out int min){  max = 0;  // out参数传递的变量必须在方法内为其赋值  min = 0;  if(nums.Length > 0)  {    for (int i =0; i < nums.Length; i++)    {      if (nums[i] > max)        max = nums[i];      if (nums[i] < min)        min = nums[i];    }  }}
  • TryParse类型转换就使用out参数返回转换结果值:
Boolean int.TryParse(string s, out int result) // 将字符串转换为int类型,out传递的变量result为转换结果(若转换失败返回result为0)方法return Boolean 类型
自定义int.TryParse()方法
public static Boolean stringToInt(string s, out int result) {  try  {    result = Convert.ToInt32(s);    return true;  }  catch {    result = 0;    return false;  }}

 

2、 ref参数

  • ref 关键字,和out一样,可以使得参数通过引用来传递。换句话说,ref能够让你直接对原来那个数进行操作,而不是将原数复制一份,对那个复制项进行操作。
  • ref参数的作用:
    • 与out不同的是,它可以双向传值,主要适用于场景内部对外部的值进行改变的情况。换句话说,ref参数侧重于将一个已经初始化了的变量以参数的形式带到一个方法中进行改变,改变完成后,再将改变后的值带出来。
    • ref的作用主要是让值类型或string这种特殊类型的引用类型能够像其他引用类型一样在方法中进行了值的改变,在方法结束之后,能够将值保存下来。
  • 在使用ref参数需要注意
    • ref参数传递的变量在传递之前一定要对其进行初始化赋值
    • 方法的参数使用ref关键字修饰时,在调用该方法时,也要在out参数传递的变量前面加上ref关键字才行。
    • 方法使用了ref参数传递变量时,不同于out,没有要求一定在方法中对ref所修饰的变量进行赋值,所以可以不赋值。  
static void Main(string[] args){    int count = 5; // ref修饰的变量,必须对其赋初值    Add(ref count);    Console.WriteLine(count);    Console.ReadKey();} public static void Add(ref int i){    i += 5; // 不一定要赋值}

 

3、 params可变参数
  • params 关键字可以使得在参数个数可变处采用参数的数组型参数,比如 int sum(params int[] values)。

  •  可变参数的作用:使得个数不确定的可变参数以数组的形式传递,适合于方法的参数个数未知的情况时,用于传递大量的数组集合参数。

  • 可变参数在使用时需注意:

    • 不允许将params修饰符与refout修饰符组合起来使用。

    • 当方法的参数列表中有多个参数时,params修饰的参数必须放在最后,不能放在前面,以免程序不好确定参数究竟有多少个而报错。比如: 

      int Sum(int initial, params int[] arr)
    • 一个方法当然可以包含可变参数和不变参数,两个可以同时使用。

public static int Sum(int initial, params int[] arr){      int sum = initial;    for(int i = 0; i < arr.Length; i++)        sum+=arr[i];    }    return sum;}

转载于:https://www.cnblogs.com/anayigeren/p/10017735.html

你可能感兴趣的文章
设计模式之策略设计模式
查看>>
groovy-语句
查看>>
VIM寄存器使用
查看>>
Java VisualVM远程监控JVM
查看>>
nasm预处理器(2)
查看>>
二叉排序树 算法实验
查看>>
Silverlight 5 beta新特性探索系列:10.浏览器模式下内嵌HTML+浏览器模式下创建txt文本文件...
查看>>
YourSQLDba 配置——修改备份路径
查看>>
nginx web服务理论与实战
查看>>
java 库存 进销存 商户 多用户管理系统 SSM springmvc 项目源码
查看>>
网易音乐版轮播-react组件版本
查看>>
ES6 - 函数与剩余运算符
查看>>
你对position了解有多深?看完这2道有意思的题你就有底了...
查看>>
WebSocket跨域问题解决
查看>>
ECMAScript6基本介绍
查看>>
世界经济论坛发布关于区块链网络安全的报告
查看>>
巨杉数据库加入CNCF云原生应用计算基金会,共建开源技术生态
查看>>
Ubuntu 16.04安装Nginx
查看>>
从 JS 编译原理到作用域(链)及闭包
查看>>
flutter 教程(一)flutter介绍
查看>>