C#:ref和out使用原理

 

 

ref和out
为什么要使用ref和out

C#——ref和out

如果我们想要通过函数改变一个值类型变量的值,这样写是没有办法改变的。因为我们知道值类型在进行值传递时,是在栈空间中重新开辟了空间,将内容拷贝到新空间。

C#——ref和out

这就是使用ref和out的原因,他们的作用是一样的可以按原地址传递对象,而不是新开一块地址赋值,在函数内部改变后将改变原来参数的值

 

ref

函数参数的修饰符

当传入的值类型参数在内部修改时

外部的值会发生变化

C#——ref和out

外部的a变成了3

 

out

函数参数的修饰符

当传入的值类型参数在内部修改时

外部的值会发生变化

C#——ref和out

外部的a变成了3

 

ref和out的区别

C#——ref和out

通过上面的两段代码,你肯定会一脸懵,看起来ref和out一模一样,都是参数前面的修饰符,都是传递引用地址可以在内部改变后,外部也变。那他们有什么区别呢?

区别一

ref传入的变量必须初始化

out不用

C#——ref和out

区别二

out传入的参数必须在内部赋值

ref不用

C#——ref和out

ref和out对引用类型同样有效

C#——ref和out

很多人可能会觉得这时候因为引用类型赋值时是传递的地址,那这时候第一个元素应该是3才对啊。我们来画图分析一下!

C#——ref和out

也就是,引用类型的数组new了一个新数组,就意味着在堆内存中重新开辟了内存空间,当前变量指向的地址也会随之改变。所以当改变了array后并没有影响到外部的arr数组。

加上ref或者out

C#——ref和out

我们从打印结果中明显的看到,外部的arr被修改了,所以我们说ref和out对于引用类型的对象来说,也是管用的!我们来图解一下!

C#——ref和out

 

总结

 

ref和out

相同点

函数参数的修饰符

传递对象的引用地址

让参数在函数内部修改后

外部也改变

不同点

初始化不同

ref必须初始化

out可以不初始化

内部赋值不同

ref可以不在内部赋值

out必须在内部赋值

注意

值类型和引用类型

都受影响

本文荟萃自公众号: 唐老狮,只做学术交流学习使用,不做为临床指导,本文观点不代表数字重症立场。

(0)
打赏 微信扫一扫 微信扫一扫
Chu的头像Chu
上一篇 2023年6月30日 下午3:26
下一篇 2023年7月3日 下午12:53

相关推荐