c#中的ref、out、params参数
out参数
与c++的引用的对比
out参数可以用来传递方法返回值,与c++中的引用有点像,但是还有有些不同:
- 调用方法的时候必须写out参数
- 调用方法之前必须先分配空间
- 调用方法之前不用先赋值.
- 必须在方法内部对out参数赋值;
下面自己实现一个tryparse函数
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Threading.Tasks; 6 7 namespace out参数 8 { 9 class Program 10 { 11 public struct Mid 12 { 13 public int[] _num; 14 public string _name; 15 } 16 static void Main(string[] args) 17 { 18 //写一个方法,求一个数组中的最大值、最小值、总和、平均值。 19 int[] numbers = { 1, 2, 3, 4, 5, 6, 7, 8, 9 }; 20 //将要返回的四个值,放到一个数组里返回;但是问题是数组是一组相同类型的数据,所以才能放到一个数组里面。 21 //如果不同类型的话,只能从参数返回了.这时候又可以用结构封装起来返回;但是这个结构不一定是有意义的,同时是需要做后续操作的. 22 // Mid mid = GetMaxMinSumAvg(numbers); 23 // Console.WriteLine("名字是{0}",mid._name); 24 int max, min, sum; 25 double avg; 26 GetTest(numbers, out max, out min, out sum,out avg); 27 Console.WriteLine("最大值是{0},最小值是{1},总和为{2},平均值为{3}",max,min,sum,avg); 28 Console.ReadKey(); 29 30 } 31 32 /// <summary> 33 /// 计算一个整数数组的最大值,最小值,平均值,总和,平均值; 34 /// </summary> 35 /// <param name="nums">需要计算的那个数组</param> 36 /// <param name="max">多余返回的最大值</param> 37 /// <param name="min">多余返回的最小值</param> 38 /// <param name="sum">对于返回的总和</param> 39 /// <param name="avg">多余返回的平均值</param> 40 public static void GetTest(int []nums,out int max,out int min,out int sum,out double avg) 41 { 42 //必须在方法内部对out参数赋值; 43 max = nums[0]; 44 min = nums[0]; 45 sum = nums[0]; 46 for (int i = 1; i < nums.Length; i++) 47 { 48 if (nums[i]>max) 49 { 50 max = nums[i]; 51 } 52 if (nums[i]<min) 53 { 54 min = nums[i]; 55 } 56 sum += nums[i]; 57 } 58 avg = sum * 0.1 / nums.Length; 59 60 } 61 /// <summary> 62 /// 自己实现一个int型的TryParse()函数; 63 /// </summary> 64 /// <param name="str"></param> 65 /// <param name="num"></param> 66 /// <returns></returns> 67 public static bool MyTryParse(string str,out int num) 68 { 69 try 70 { 71 num = int.Parse(str); 72 } 73 catch (OverflowException) 74 { 75 76 num = 0; 77 return false; 78 } 79 return true; 80 } 81 } 82 }
ref参数
ref就相当于c++中的引用;比out要更像一点,看它就像是reference的缩写;
注意三点:
- 在调用方法前一定要赋值;
- 调用时一定要写ref;
- 一定要构造空间
下面写一个交换两个变量内容的操作:
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Threading.Tasks; 6 7 //ref就相当于c++中的引用;比out要更像一点,out专注返回20年; 8 namespace ref参数 9 { 10 class Program 11 { 12 static void Main(string[] args) 13 { 14 int n1 = 10; 15 int n2 = 20; 16 //注意两点;在调用方法前一定要赋值;一定要写ref;一定要构造空间 17 Exchange(ref n1, ref n2); 18 Console.WriteLine("交换后,第一个变量是{0},第二个参数是{1}",n1,n2); 19 Console.ReadKey(); 20 21 } 22 /// <summary> 23 /// 交换两个变量 24 /// </summary> 25 /// <param name="n1">第一个变量</param> 26 /// <param name="n2">第二个变量</param> 27 public static void Exchange(ref int n1,ref int n2) 28 { 29 n1 = n1 - n2; 30 n2 = n1 + n2; 31 n1 = n2 - n1; 32 } 33 } 34 }
params参数
params是可变类型参数,但是它与c++中的变长参数又有不同:
- 将实参列表中跟可变参数数组类型一致的元素都当做数组的元素去处理。
- params可变参数必须是形参列表中的最后一个元素。
- 唯一性:在一个函数里,只能有一个params可变参数
- 调用时有两种传递方式:数组和直接数据传;
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Threading.Tasks; 6 7 namespace Params参数 8 { 9 class Program 10 { 11 static void Main(string[] args) 12 { 13 int [] a={1,2,3}; 14 Test("呵呵",a); 15 } 16 public static void Test(string name,params int[] par) 17 { 18 19 } 20 } 21 } 22 23 /* 24 * param可变参数 可以没有 25 * 唯一性 26 * 最后性 27 * 两种传递方式 28 * 求任意长度数组的最大值; 29 * 30 */
转载于:https://www.cnblogs.com/a-dou/p/6295807.html
c#中的ref、out、params参数相关推荐
- 如何用java语言实现C#中的ref关键字(按引用传递参数)的效果
https://www.cnblogs.com/nnngu/p/8300164.html 转载于:https://www.cnblogs.com/cnki/p/10409684.html
- html表格怎样传入数据类型,Echarts图表中pie类型tooltip中formatter函数传递的参数从哪里来?...
最近参与一个项目遇到一个问题,这个tooltip提示框信息怎么配?找了好久最终配置成功,分享到这里大家共享一下,能节省不少时间 首先可以看一下系统介绍的文章,里面知识点比较多,也有注释,讲的很全,推荐 ...
- .net程序员的盲点(一):参数修饰符ref,out ,params的区别
C#中有三个关键字-ref,out ,params,虽然本人不喜欢这三个关键字,因为它们疑似破坏面向对象特性.但是既然m$把融入在c#体系中,那么我们就来认识一下参数修饰符ref,out ,param ...
- 参数修饰符ref,out ,params的区别
C#中有三个关键字-ref,out ,params,虽然本人不喜欢这三个关键字,因为它们疑似破坏面向对象特性.但是既然m$把融入在c#体系中,那么我们就来认识一下参数修饰符ref,out ,param ...
- c#中out、ref和params的用法与区别
ref和out都对函数参数采用引用传递形式--不管是值类型参数还是引用类型参数,并且定义函数和调用函数时都必须显示生命该参数为 ref/out形式.两者都可以使函数传回多个结果. 两者区别: 两种参数 ...
- C# 中的三个高级参数 params
params params 关键字可以指定采用数目可变的参数的方法参数. 可以发送参数声明中所指定类型的逗号分隔的参数列表或指定类型的参数数组. 还可以不发送参数. 在方法声明中的 params 关键 ...
- C#中关键字ref与out的区别(转)
C#中关键字ref与out的区别(转) 在C#中,ref与out是很特殊的两个关键字.使用它们,可以使参数按照引用来传递. 总的来说,通常我们向方法中传递的是值.方法获得的是这些值的一个拷贝,然后使用 ...
- c#中使用ref和out传值
c#中使用ref和out传值 首先,如果不使用这两个关键字,那是什么样 呢? 看下面的例子: 使用ref: using System; class Test { static void Swap(re ...
- 使用C#中的ref关键字,用2个简单例子来说明
在C#中,如果在方法参数前面加上ref关键字,说明参数传递的是引用,而不是值.如何理解呢? 参数是简单类型的例子 static void Main(string[] args){string temp ...
- C#中关键字ref和out
1.ref: ref:MSDN的定义为:"The ref keyword indicates a value that is passed by reference."就是通过引用 ...
最新文章
- 永久设置SecureCRT的背景色和文字颜色方案
- 用bho方式拦截中国电信流氓广告
- linux 无敌kill -KILL processID
- 小工匠聊架构-写给研发工程师的全链路压测
- Building Paragon in Unreal Engine 4 - GDC 2016
- JSF Tomcat配置示例
- yolo v4 python_YOLOv4: Darknet 如何于 Ubuntu 编译,及使用 Python 接口
- mysql怎么初始化自增值_MySQL 重置自增值
- 开源 ERP 软件 Odoo 提速指南
- iOS开发之五:常用控件--UITextField的使用
- css 查看更多_Cirrus(原型制作CSS框架)下载-Cirrus(原型制作CSS框架)v0.6.0免费版下载...
- 计算机技术硬件基础.pdf,网络工程师辅导教程--计算机硬件基础知识部分.pdf
- EXCEL图表 横坐标日期格式无法修改问题
- dm9000网卡驱动分析
- java拆箱 装箱 一篇文章就够了
- rk3328或树莓派开发板系统镜像备份制作剪裁
- MySQL、JDBC、HTML、CSS、JavaScript、jQuery、tomcat、Http、Servlet、JSP、EL、JSTL、Maven、Cookie、Session(框架第一部分)
- carLife 车机端集成
- SLD各地物配置文件
- Android设置自定义字体