c#中ref和out使用及区别
在c#中,使用方法获得返回值时,只能获取一个返回值。当使用ref和out关键字后,可以获取多个返回值。
MSDN对ref和out关键字的说明如下:
ref 关键字: 使参数按引用传递。其效果是,当控制权传递回调用方法时,在方法中对参数所做的任何更改都将反映在该变量中。若要使用 ref 参数,则方法定义和调用方法都必须显式使用 ref 关键字。
out 关键字:会导致参数通过引用来传递。这与 ref 关键字类似,若要使用 out 参数,方法定义和调用方法都必须显式使用 out 关键字。
它们的区别在于: ref 要求变量必须在传递之前进行初始化;而out不需要初始(或者初始化也不会影响到方法内部的值,所以你初始化没用),需要在方法内部赋值或者初始化。
我们用一个例子来测试一下ref和out关键字的使用。
首先我们定义一个方法,计算一个int数组中的和,最大值,最小值和平均值。
代码如下:使用ref关键字
public int GetIntResult(int[] arr,ref int max,ref int min,ref double avg)
{
int sum = ;
max = arr[];
min = arr[];
for (int i = ; i < arr.Length; i++)
{
sum += arr[i]; if (max < arr[i]) max = arr[i];
if (min > arr[i]) min = arr[i]; }
avg = sum / arr.Length;
return sum;
}
在主方法中调用上面的方法代码:
我们先测试当为定义的变量不初始化时,程序会提示什么错误呢?会系统使用了为初始化的变量。所以说在使用ref关键字时,必须对变量初始化。提示错误如下图:

测试使用关键字ref的主方法代码如下:
int[] arry = new int[] {,,,,,,, };
int max=;
int min=;
double avg= ;
Test test = new Test();
int sum = test.GetIntResult(arry,ref max,ref min,ref avg);//调用时也需要使用关键字
Console.WriteLine($"sum:{sum} max:{max} min:{min} avg:{avg}");
运行程序,测试结果:

使用out关键字,跟测试ref关键字相同。
int[] arry = new int[] { , , , , , , , };
int max=;////在使用out关键字时,不需要在此处初始化,初始化也不会影响到方法内部的值,所以你初始化没用
int min=;
double avg=;
Test test = new Test();
int sum = test.GetIntResult(arry, out max, out min, out avg);//调用时也需要使用关键字
Console.WriteLine($"sum:{sum} max:{max} min:{min} avg:{avg}");
测试结果跟上面。
我们来继续同时使用ref和out关键字测试。代码如下:
public string GetStringResult(string code,ref string name,out int age)
{
age = ; //
//deSomething..........
return code;
}
主方法调用测试上面方法代码如下:
string code = "x9527";
string name = "詹姆斯邦德";
int age = ;//我们在这里赋值,等运行的时候看看.....会输出什么
Test test = new Test();
string strCode= test.GetStringResult(code,ref name,out age);
Console.WriteLine($"name={name} code={code} age={age}");
测试运行结果:

c#中ref和out使用及区别的更多相关文章
- Spring中Bean的命名问题(id和name区别)及ref和idref之间的区别
Spring中Bean的命名 1.每个Bean可以有一个id属性,并可以根据该id在IoC容器中查找该Bean,该id属性值必须在IoC容器中唯一: 2.可以不指定id属性,只指定全限定类名,如: & ...
- (转)Spring中Bean的命名问题(id和name区别)及ref和idref之间的区别
Spring中Bean的命名 1.每个Bean可以有一个id属性,并可以根据该id在IoC容器中查找该Bean,该id属性值必须在IoC容器中唯一: 2.可以不指定id属性,只指定全限定类名,如: & ...
- Spring中Bean的命名问题及ref和idref之间的区别
一直在用Spring,其实对其了解甚少,刚去了解了一下Spring中Bean的命名问题以及ref和idref之间的区别,略作记录,以备后查. Spring中Bean的命名 1.每个Bean可以有一个i ...
- C#中ref和out的区别浅析
这篇文章主要介绍了C#中ref和out的区别浅析,当一个方法需要返回多个值的时候,就需要用到ref和out,那么这两个方法区别在哪儿呢,需要的朋友可以参考下 在C#中通过使用方法来获取返回值时,通 ...
- Spring中<ref local=""/>与<ref bean=""/>区别
小 Spring中<ref local=""/>与<ref bean=""/>区别 (2011-03-19 19:21:58) 转载▼ ...
- property中ref、value、name的区别
转载: 版权声明:本文为CSDN博主「qq_36098284」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明.原文链接:https://blog.csdn.net ...
- C#中ref和out的使用与区别
C#中ref关键字和out关键字所实现的功能差不多,都是指定一个形参按照引用传递而不是实参的副本传递.但是二者适用场景还是有些区别的:out适合用在需要retrun多个返回值的地方,而ref则适合用在 ...
- java 中sendredirect()和forward()方法的区别
一.文章1 HttpServletResponse.sendRedirect与RequestDispatcher.forward方法都可以实现获取相应URL资源. sendRedirect实现请求重 ...
- C#中??和?分别是什么意思? 在ASP.NET开发中一些单词的标准缩写 C#SESSION丢失问题的解决办法 在C#中INTERFACE与ABSTRACT CLASS的区别 SQL命令语句小技巧 JQUERY判断CHECKBOX是否选中三种方法 JS中!=、==、!==、===的用法和区别 在对象比较中,对象相等和对象一致分别指的是什么?
C#中??和?分别是什么意思? 在C#中??和?分别是什么意思? 1. 可空类型修饰符(?):引用类型可以使用空引用表示一个不存在的值,而值类型通常不能表示为空.例如:string str=null; ...
随机推荐
- C语言中scanf函数的实现
接上一篇C语言中可变参数函数实现原理,从理论上详细介绍了C语言中可变参数函数的实现,这一篇从minix内核源码中的scanf函数入手,学习C语言经典可变参数函数的实现过程 在scanf.c文件中,可以 ...
- 通过Adb 查看当前正在运行的Activity.
extends:http://www.cnblogs.com/tt_mc/p/4269833.html adb shell dumpsys activity activities | sed -En ...
- freemarker了解
今天主要了解了项目流程,了解了这周要做退款详情迁移,了解了freemarker
- Shell while
while commanddo ...done c=0while [ $c -lt 5 ]do c='expr $c+1' echo $cdone
- python标准库和第三方库的区别
1.python的标准库是随着pyhon安装的时候默认自带的库. 2.python的第三方库,需要下载后安装到python的安装目录下,不同的第三方库安装及使用方法不同. 3.它们调用方式是一样的,都 ...
- 9.13Django ORM那些事
2018-9-13 14:23:22 ORM那些事 参考 : https://www.cnblogs.com/liwenzhou/p/8660826.html 今天的都是ORM的查询 更详细进阶了! ...
- Solve Error: 'has incomplete type', foward declaration of 'class x'
在C++的OOB编程中,有时候我们会遇到这样的错误Error: 'has incomplete type',forward declaration of 'class x',那么是什么原因引起的这个问 ...
- iOS核心动画の摘记
- 初识Spring Webflux
Important to know is that there are two ways to use Spring Webflux. One using annotations, which is ...
- php iconv() : Detected an illegal character in input string
php iconv() : Detected an illegal character in input string_php技巧_脚本之家 https://www.jb51.net/article/ ...