值类型与引用类型及ref修饰符与out修饰符的关系

值类型与引用类型的区别;
下面我用一个例子,画一个图来说明一下值类型与引用类型的区别;

引用类型的值

当我们要使用引用类型的值的时候,我们new一个新的实体,但是该实体根本就没有创建,而是直接与被引用值的地址建立联系,也就是说,该创建的新的实体的与被引用的值其实就是一个东西。当新创建的实体改变时,被引用的值也会改变。被引用的值被改变时,新创建的实体的值也会改变。

如下图,堆中有一个引用类型的值名a,我们现在需要调用a的值,用b=new a,获得了a的值,这时b并未创建一个新的实体,而是将调用地址直接指向了a,这样当我们改变b的值的时候,a的值随之改变。同理a的值改变时b的值也随之改变。
在这里插入图片描述

值类型的值

值类型的值在执行b=new a 代码的时候,会在堆里面重新分出控件然后将a的值复制到新的内存空间中,这时候b指向的是新创建出来的空间b。b的值改变的时候,a的值不受影响。
在这里插入图片描述
ref修饰符,的作用是将值类型的参数修饰为引用类型。
out修饰符的功能主要是返回方法中的参数。
out修饰符和ref修饰符的功能都是相同的,就是将参数作为引用类型的值进行传递。
这样我们即使没有返回值,也相当于获得了该方法的返回值。
out修饰符与ref修饰符的不同之处在于:
out修饰符修饰的参数在传参的时候可以不用赋值,但是在方法执行完之前一定得赋值。
ref修饰符在传值的时候需要参数有值;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章