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这两个关键 ...
随机推荐
- js中的作用域
作用域: 域:空间.范围.区域…… 作用:读.写 浏览器:“JS解析器” 1)“找一些东西” :var function 参数 a = ...未定义所有的变量,在正式运行代码之前,都提前 ...
- 中文代码之Django官方入门:建立模型
参考编写你的第一个 Django 应用,第 2 部分 创建项目后,首先用中文命名应用: $ python3 manage.py startapp 投票 之后在models.py建立模型,其他各种相关配 ...
- ctr预估论文梳理和个人理解
问题描述 ctr的全称是click through rate,就是预估用户的点击率,可以用于推荐系统的ranking阶段.ctr预估可以理解为给用户的特征.item的特征以及context的特征(比如 ...
- Troubleshooting ORA-01555 - Snapshot Too Old: Rollback Segment Number "String" With Name "String" Too Small (Doc ID 1580790.1)
Troubleshooting ORA-01555 - Snapshot Too Old: Rollback Segment Number "String" With Name & ...
- Linux—yum使用详解
yum配置 yum的配置文件在 /etc/yum.conf 参考:https://www.cnblogs.com/yhongji/p/9384780.html yum源配置 yum源文件在 /et ...
- emacs require和provide
Emacs的默认配置文件是.emacs,Emacs启动时会读取并执行.emacs中的LISP代码,用户使用.emacs达到自己的Emacs初始化配置目的. 不过单独使用.emacs有一个问题,因为时间 ...
- [Linux] 纯净ubuntu系统仓库更换为阿里云的源
1.先apt-get update一下当前默认的源,更新完成后先把vim命令安装一下,再修改源仓库为阿里云,否则无法直接编辑文件 2.先添加阿里云的源,编辑文件/etc/apt/sources.lis ...
- Ubuntu 18.04安装 pyenv、pyenv-virtualenv、virtualenv、Numpy、SciPy、Pillow、Matplotlib
1.目前Python版本管理工具有很多,pyenv是比较好用的一款,安装如下: 输入: git clone https://github.com/pyenv/pyenv.git ~/.pyenv ec ...
- 忘记IBM服务器的登录IP
问题描述: 一台服务器安装了winserver2003系统,经过漫长的加电启动,能进入到win2003的登录界面,提示ctrl+alt+del登录界面,但是发现键盘失灵了,无法键入ctrl+alt+d ...
- 【Ribbon篇四】自定义负载均衡策略(4)
官方文档特别指出:自定义的负载均衡配置类不能放在 @componentScan 所扫描的当前包下及其子包下,否则我们自定义的这个配置类就会被所有的Ribbon客户端所共享,也就是说我们达不到特殊化定制 ...