C# 方法的out、ref、params参数
一、out参数实例
【实例】求一个数组中的最大值、最小值、总和、平均值
class Program
{
static void Main(string[] args)
{
//写一个方法 求一个数组中的最大值、最小值、总和、平均值
int[] nums = { 1, 2, 3, 4, 5, 6 ,7};
int max;
int sum;
int min;
int avg;
bool b;
string s;
double d;
GetValue(nums, out max, out min, out sum, out avg,out b,out s,out d);
Console.WriteLine("数组中的最大值:{0},最小值:{1},总和:{2},平均值:{3}",max ,min,sum,avg);
Console.WriteLine("输出out参数的方法不同类型的值:{0},{1},{2}",b,s,d);
Console.ReadKey();
}
/// <summary>
/// 求一个整数的数组的最大值,最小值,总和,平均值
/// </summary>
/// <param name="nums">要求值的数组</param>
/// <param name="max">返回的最大值</param>
/// <param name="min">返回的最小值</param>
/// <param name="sum">返回的总和</param>
/// <param name="avg">返回的平均值</param>
public static void GetValue(int[] nums, out int max, out int min, out int sum, out int avg, out bool b,out string s,out double d)
{
//out参数要求在方法的内部必须为其赋值
max = nums[0];
min = nums[0];
sum = 0;
for (int i = 0; i < nums.Length; i++)
{
if (nums[i]>max)
{
max = nums[i];
}
if (nums[i]<min)
{
min = nums[i];
}
sum += nums[i];
}
avg = sum / nums.Length; b = true;
s = "123";
d = 3.13;
}
}
执行代码输出结果,如图所示:

总结:
如果一个方法中,返回多个相同类型的值时候,我们可以考虑返回一个数组。但是返回多个不同类型的值时候,返回数组就不行,那么这个时候,我们可以考虑用out参数。
out参数就侧重于一个方法可以返回多个不同类型的值。
二、ref参数的实例
【实例】使用方法来交换两个int类型的变量
class Program
{
static void Main(string[] args)
{
//使用方法来交换两个int类型的变量
int n1 = 10;
int n2 = 20;
Test(ref n1, ref n2);
Console.WriteLine("两个值互相交换后n1为{0},n2为:{1}",n1,n2);
Console.ReadKey();
}
public static void Test(ref int n1,ref int n2)
{
int temp = n1;
n1 = n2;
n2 = temp;
}
}
执行代码输出结果,如图所示:

总结:
ref参数能够将一个变量带入一个方法中进行改变,改变完成后,再将改变后的值带出方法。
ref参数要求在方法外必须要赋值,而方法内可以不赋值。
三、params可变参数
【实例】求任意长度数组的和 整数类型的
class Program
{
static void Main(string[] args)
{
//求任意长度数组的和 整数类型的
int[] nums = { 1, 2, 3, 4, 5, 6 };
int sum = GetSum(8,9);
Console.WriteLine(sum);
Console.ReadKey();
}
public static int GetSum(params int[] nums)
{
int sum = 0;
for (int i = 0; i < nums.Length; i++)
{
sum += nums[i];
}
return sum;
}
}
执行代码输出结果,如图所示:

如图所示:

总结:
将实参数列表中跟可变参数数组类型一致的元素都当做数组的元素去处理
params可变参数必须是形参列表中的最后一个元素,并且在方法声明中只允许一个params关键字。
四、out 与ref的区别
区别:
1.使用ref参数时,传入的参数必须被初始化,对out而言,必须在方法中对其完成初始化。
2.使用ref参数和out参数时,在方法的参数和执行方法时,都要加ref或者out关键字。
3.out参数适合用在需要return多个返回值的地方,而ref参数则用在需要被调用的方法修改调用者的引用的时候。
如图所示:
out参数

ref参数

ref关键字是需要先初始化传入的参数,才能够使用。
C# 方法的out、ref、params参数的更多相关文章
- 【又长见识了】函数传参,params参数,ref和out参数详解
一.原来函数这样传参 先看一个函数和函数调用. static void Main(string[] args) { ; Test(num);//局部变量在使用之前赋值 //Test(10); //直接 ...
- params参数的调用
namespace params参数的用法 { class Program { public static void Test(string name,params int[] score) { ; ...
- out参数,ref参数,params参数数组
params参数数组 params关键字可以为方法指定数目可变的参数.params关键字修饰的参数,可以传入任意数目的同类型参数,甚至可以不传入参数. 不过params修饰的参数必须是方法的最后一个参 ...
- c#中的ref、out、params参数
out参数 与c++的引用的对比 out参数可以用来传递方法返回值,与c++中的引用有点像,但是还有有些不同: - 调用方法的时候必须写out参数 - 调用方法之前必须先分配空间 - 调用方法之前不用 ...
- C#学习笔记13:静态方法、方法重载和ref、out参数
静态方法 调用:如果你写的方法和Main()方法在同一个类中,直接写方法名. 如果不在一个类中,需要类名.方法名(); 非静态方法: 调用:创建一个类的对象 对象名.方法名(); Person pe ...
- C# 中out,ref,params参数的使用
C#中有三个高级参数,分别是out,ref,params: 1.out参数 方法使用return 只能返回一个值(一个数值或一个指针值),out参数可以帮助我们在一个方法中返回多个值,不限类型. ...
- C#高级参数out,ref,params
在C#中通过使用方法来获取返回值时,通常只能得到一个返回值.因此,当一个方法需要返回多个值的时候,就需要用到ref和out,那么这两个方法区别在哪儿呢? out 当需要返回一系列返回值时可用out高级 ...
- 含有ref out 参数 的方法反射 Emit 与 普通
反射中很多朋友应该屡屡被带有ref out参数的方法折腾 当使用正常反射一个方法时候: 代码如下调用一个后期绑定方法MakeByRefType 就行了 MemberInfo test = typeof ...
- axios中get请求的params参数中带数组的处理方法
axios中get请求的params参数中带数组时导致向后台传参失败报错:from origin 'http://localhost:8080' has been blocked by CORS po ...
- C#中in,out,ref,params的作用和区别
ref和out的区别在C# 中,既可以通过值也可以通过引用传递参数.通过引用传递参数允许函数成员更改参数的值,并保持该更改.若要通过引用传递参数, 可使用ref或out关键字.ref和out这两个关键 ...
随机推荐
- Set a One-to-Many Relationship设置一对多关系 (XPO)
In this lesson, you will learn how to set a one-to-many relationship between business objects. The C ...
- html之form表单
目录 form表单 表单属性 action method input标签 select标签 textarea标签 form表单 表单能够获取用户输入,用于向服务器传输数据,从而实现用户与web服务器的 ...
- .net core从版本 3.0 迁移到 3.1引发的BUG
前几天微软的.net core3.1发布后,随把visual studio 2019升级到16.4.1版本并把项目进行框架升级.升级后的项目在IdentityServer4授权后在360安全浏览器竟然 ...
- 5G浪潮来袭,程序员在风口中有何机遇
导读:本文共2894字,预计阅读时间为9分钟.通过阅读本文,你将了解到5G的优势.即将燃爆的领域以及程序员在快速发展的5G产业中所需关注的技术. 5G时代已经来临 随着中美5G主导权之战的持续发酵,5 ...
- CodeForces 1260D(二分+贪心+差分)
题意 https://vjudge.net/problem/CodeForces-1260D 有m个士兵,t秒,你要带尽可能多的士兵从0去n+1,且他们不能被杀死.路上有一些陷阱,陷阱d[i]会杀死能 ...
- windows系统下mount创建的.vhd
自己无聊时候分出了几个磁盘用来练习,存放个人东西,cdef盘除了c盘都是随便乱存的(粗心-_-),于是分出了两个20G的vhd文件,但是每次开机都要去d盘点击挂载太麻烦,现在分享自己的方法. 创建mo ...
- assets文件夹与static文件夹的区别
assets文件夹与static文件夹的区别原地址==>https://www.cnblogs.com/x123811/p/9230700.html 相同点===>assets文件夹和st ...
- HTML与CSS学习笔记(5)
1.文字阴影?(针对文字) text-shadow: 例如 text-shadow: 10px 10px 10px blue;四个值分别是 x y blur color blur表示模糊值,越大越模糊 ...
- linux shell脚本命令
sort命令 sort #按照字典序排序 sort -n #以数值来排序,避免10比2小的情况 sort -k #如果文件有多列,指定排序的列 sort -r #逆序排列 uniq 命令 sort t ...
- Jenkins配置:添加用户和管理权限
Jenkins配置:添加用户和管理权限 参考文章:http://www.cnblogs.com/zz0412/p/jenkins_jj_14.html 今天给大家说说使用Jenkins专有用户数据库的 ...