C#中ref和out的区别

原创 2015年11月19日 11:24:41

在C#中, ref和out看起来有相似的作用,但是他们是有区别的。

  在C#编程中,有时会希望使用引用形式从方法中接收值,但不传入。例如,可能有一个执行某种功能的方法,比如打开在引用形参中返回成功或失败代码的网络套接字。在此情况下,没有信息传递方法,但有从方法传出的信息。这种情况存在的问题是在调用前必须将ref形参初始化为一个值。因此,要使用ref形参,需要赋予实参一个哑元值,从而可以满足这一约束。C#中out形参就可以解决此类问题。
  out形参类似于ref形参,但它只能用来将值从方法中传出。在调用之前,并不需要为out形参的变量赋予初始值。在方法中,out形参总是被认为是未赋值的,但在方法结束前必须赋于形参一个值。因此,当调用方法后,out形参引用的变量会包含一个值。
  使用ref 关键字使参数按引用传递。其效果是,当控制权传递回调用方法时,在方法中对参数所做的任何更改都将反映在该变量中。简单点说就是,使用了ref和out的效果就几乎和C中使用了指针变量一样。它能够让你直接对原数进行操作,而不是对那个原数的Copy进行操作。
  

也就是说,out参数一般用于方法需要返回多个不同类型的返回值时使用(如bool res int.tryparse(string s,out int num);既返回是否转换成功的布尔值,也返回转换后的int类型),ref参数一般用于函数内部需要修改外部的数值,两者的作用都类似于C语言中的指针,
但是,使用out时,方法外部声明参数时不必初始化,初始化也没有用,因为初始化和赋值必须在方法内进行。
然而使用ref时,方法外部在传参前必须进行初始化,否则会报错

版权声明:本文为博主原创文章,未经博主允许不得转载。

c# ref out 区别 比较 汇总

ref(C# 参考) Visual Studio 2015 其他版本   ref 关键字会导致参数通过引用传递,而不是通过值传递。 通过引用传递的效果...
  • hejisan
  • hejisan
  • 2016年07月06日 00:05
  • 639

C#中方法参数 ref 与 out 的区别

方法中参数的类型有三种 in型参数 in型参数通过值传递的方式将数值传入方法中。即我们在Java中常见的方法 ref型参数 该种类型的参数传递变量地址给方法(引用传递),传递前变量必须初始化。 ...
  • jl1134069094
  • jl1134069094
  • 2016年01月13日 17:25
  • 916

C# out、ref关键字的用法和区别

说说自己对out、ref的认识,面试问到的几率很高哟。 out: class Program { /* * out、ref都是引用传递,传递后使用...
  • CommandBaby
  • CommandBaby
  • 2016年04月06日 14:53
  • 3665

在C#中 ref和out的区别

在C# 中,既可以通过值也可以通过引用传递参数。通过引用传递参数允许函数成员更改参数的值,并保持该更改。若要通过引用传递参数, 可使用ref或out关键字。ref和out这两个关键字都能够提供相似的功...
  • unity_http
  • unity_http
  • 2016年07月15日 20:36
  • 1319

ref和out的作用和区别

相同点:方法的定义和调用都必须显示使用ref、out关键字。都会导致参数按引用传递。 不同点:传递给ref关键字的参数必须赋初始值,而out不用。out关键字会清空变量,即使变量已经赋值也不行,...
  • fox123871
  • fox123871
  • 2014年08月07日 23:51
  • 1208

c#中的关键字out是什么意思?ref是什么意思?它们有什么区别?

不知大家有没有遇到过需要一个函数返回多个值的情况。 当写代码要返回多个值的时候,当然可以返回一个数组来实现,但如果遇到需要返回的多个值的类型不同呢?这个时候怎么办? c#中,out关键字和ref关...
  • sinat_23079759
  • sinat_23079759
  • 2016年10月22日 22:14
  • 2036

C#中ref和out的区别

首先:两者都是按地址传递的,使用后都将改变原来参数的数值。 其次:ref可以把参数的数值传递进函数,但是out是要把参数清空,就是说你无法把一个数值从out传递进去的,out进去后,参数的数值为...
  • dk_0520
  • dk_0520
  • 2017年03月29日 10:44
  • 64

c#中out、ref和params的用法与区别

ref和out都对函数参数采用引用传递形式——不管是值类型参数还是引用类型参数,并且定义函数和调用函数时都必须显示生命该参数为 ref/out形式。两者都可以使函数传回多个结果。 两者区别: 两...
  • u011555996
  • u011555996
  • 2016年10月20日 13:52
  • 644

C# ref与out 引用和传值的区别

C# 中,既可以通过值也可以通过引用传递参数。通过引用传递参数允许函数成员更改参数的值,并保持该更改。若要通过引用传递参数, 可使用ref或out关键字。ref和out这两个关键字都能够提供相似的功效...
  • u013192061
  • u013192061
  • 2015年03月04日 09:06
  • 743

C#中Out和Ref参数修饰符

在编程过程中对于函数之间的参数的传递一般分为两种:传值和传地址。下面为大家分析一下。  传值     比如你又一份文档,如果采用传值的话,相当于我复制了一份,因此我对我这份文档的修改都不会影响...
  • ZHOUCHAOQIANG
  • ZHOUCHAOQIANG
  • 2014年10月02日 14:31
  • 2863
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C#中ref和out的区别
举报原因:
原因补充:

(最多只允许输入30个字)