美文网首页
C# ref & out

C# ref & out

作者: MoZhou | 来源:发表于2016-11-18 00:45 被阅读70次

1. What is ref & out ?

参数传递时按引用传递参数

2.Why need ref & out ?

按值传递是通过将实参的值Copy到形参,来实现将值传递到方法。CLR会1)给形参分配空间 2)将实参值复制到形参

//假设需要交换两个数
void Swap(int a,int b){
 int temp = a;
 a = b;
 b = temp;
}
---------------------------
int a = 1;
int b = 2;
Swap(1,2);
结果a仍为1,b仍为2

因为参数传递时是默认按值来传递的所以这样并不能完成值得交换。Swap方法在内部操作得并不是a,b变量本身,而是它得克隆,而当我们需要变量在方法执行以后也做了相应改变时,我们就需要按引用传递参数的方式,于是就需要ref 和 out 这种可以使变量按引用传递地关键字。

此外,由于按引用传递的参数,CLR将不再为形参分配新内存,形参相当于实参的一个别名,它们指向同一个内存地址空间,节省内存且效率更高。

3.How to understand 引用类型 & 值类型?

假设我有一个很漂亮地风筝,然后你想要风筝,这时候我不是给你买一个和我一模一样的风筝,而是把我风筝的线交给你,至于你怎么处置这个风筝全看你自己。你所做得每一个动作都将直接作用于风筝本身,而不是作用于和它一模一样的副本。

值类型就相当于买的一个和我一模一样的风筝,引用类型就相当于是我的风筝的线

4.what the same thing for ref & out ?

out & ref 都是按引用传递的,作用后都将改变原来参数的数值。

int a = 1;
int b = 2;
Swap(ref a, ref b) // a = 2, b = 1

5.what the difference between ref & out ?

  • ref 有进有出 参数传入前必须初始化否则报语法错误,传入参数在函数内部不会重新初始化可以直接使用。ref 多用于操作某个后续仍需继续使用的变量场景
  • out 只进不出 参数传入前可以不初始化,但是传入后在函数内部必须先重新初始化后再使用,所以不管参数传入前的值是多少,传入函数后都会被初始化赋值后返回。out 多用于返回多个返回值的场景(如bool int.tryParse(string, out i)同时返回bool 和 i)

相关文章

  • C# ref & out

    1. What is ref & out ? 参数传递时按引用传递参数 2.Why need ref & out ...

  • Ref、Out、In

    Ref ??? 传引用??? Out(a new feature of C# 7) string input1 =...

  • C#中out和ref之间的区别

    在本文,你将学会C#中 out 和 ref各自的区别,依旧具体使用场景。 共同点out、ref都是传递引用(内存地...

  • C# ref out

    ref按引用传递,在方法内可以直接修改原对象。是一种直接修改原变量的方式 out,方法内必须对参数进行赋值,外部无...

  • Unity中有关C#的几个要点

    大致总结下C#中几个常见知识点的个人理解,以对基础已经有所了解为前提。 ref/out 区别:ref参数需要在传入...

  • 【黑苹果】关于CodecCommander定制过程中耳机杂音修复

    查找类似上图中的节点( 关键字:Stereo Amp-In Amp-Out 或 IN OUT HP EAPD De...

  • Out And Ref

    在C#中Out和Ref使用方法基本一样。Out使用时其实参数可以不赋值,在使用时在实参数前面加上Out,如下:Ou...

  • C#之ref和out

    思考下面的代码会输出什么值。 ref用途 ref用来修饰方法的参数,被ref修饰的参数,在调用的时候,会传递过来的...

  • C# 方法参数(params、in、ref、out)

    参考转载文档:https://docs.microsoft.com/zh-cn/dotnet/csharp/lan...

  • C#中的out和ref

    ref参数 在C#中,调用函数时的实参对应到函数的形参时,实际是新建一个变量,然后将实参的值赋给形参,然后函数再用...

网友评论

      本文标题:C# ref & out

      本文链接:https://www.haomeiwen.com/subject/axejpttx.html