值传递和引用传递

值传递

传递的是变量在堆栈上的值的副本

值类型在堆栈上存的就是实际的值,

引用类型在堆栈上存的是一个地址,这个地址就是该引用类型在托管堆上存放的实际的值的地址

以修改文件为例,

值类型的值传递,就好比先复制一份该文件,然后再对复制后的文件进行修改

引用类型的值传递,就好比传递的是快捷方式的副本,然后通过这个副本找到文件,再进行修改,这里一定要注意,传递的依然是副本!!!!!!!!!!也就是说,传递的是地址的副本!!

string类型比较特殊,因为字符串具有不可变性,

所以在string类型变量值传递的时候,会在托管堆中新开辟一块内存,然后将新地址赋值给形参,而实参指向的地址不变.

因此,string类型变量值传递的效果和值类型一样

引用传递 ( ref / out)

 传递的是变量在堆栈上的地址

对于引用类型而言,这个地址就相当于是引用的引用

原文地址:https://www.cnblogs.com/refuge/p/8569845.html