[学习笔记]C#中out与ref参数传递方式

来源:互联网 发布:阿里代销淘宝图片处理 编辑:程序博客网 时间:2024/06/01 10:13

今天恰好学到C#的参数传递模式,关于out和ref的区别网上已经有非常多的资料了。
但是普遍都认为out与ref没有区别,只是out会被初始化,我觉得仅仅这样理解C#特意划分出来的一个参数形式是不够仔细的,太Navie了,一个语言的任何东西都是有其用意,有其具体实用场景的。

int a=5;
method(ref int a) :在方法中对a的所有改动都会改动原值a(5),这里其实是对a的内存地址的引用。

int a;
method(out int a) :这里没有对a进行初始化,因为即使初始化了a=5,在method中a也会被自动清空,但是在mothod中对于a的改动还是会体现在原值a上……….
所以我们仔细想一下,这个参数不能传进去值,却可以返回参数对其的赋值和改变,那这个参数是干啥的呢???

其实,out参数引用就是用来作为返回值的,out的本意也是“输出”,如下:
实例

out可以允许在一个方法内,返回多个参数,虽然用ref也能实现相同做法,但是out明显就是C#为实现多返回值而专门设定的一个参数,也更容易让人理解:这个参数是作为返回值媒介,那个参数是作为参数传入的。

按我的理解,ref就是用于需要对原参数进行修改的方式,允许多参数同时修改。(如果使用return,几个不同处理方式的参数就需要写几个不同的方法,使用ref可以写在同一个方法中,写法简洁明了)

而out就是专门传空值进入函数,作为多return值的媒介,这样就可以实现多返回值。