想问一下大佬们,ref和out是把值类型转化为引用类型了吗?按理来说值类型就是值类型,怎么会转为引用类型?能不能详细讲解一下!感谢!!!
封箱、拆箱
https://www.cnblogs.com/kdp0213/p/8533408.html
参数是什么类型还是什么类型,不会改变的
引用类型不用ref或out,都是在堆上,改变了数据就会影响原来的
而值类型不用的话就会重新分配一个地址,用上了就用原来的地址
不要太深究。
Object是万物的基类。
值类型和引用类型都派生自Object。
而Object自己是引用类型。
你说,那引用类型,怎么就生出一个值类型的小孩了呢?
对对,我绕进去了,可以通过装箱和拆箱操作进行转化,不过ref和out好像并没有进行装箱操作
大哥,我也不想深究,面试问这个啊
根据大佬们的解释以及我又查了资料,我重新理解为这样的:值类型其实也包含地址和值,不过看上去都是自身,平时变量间传递是值的传递,用ref/out修饰形参后传递给形参的是地址,C#在底层代码应该会判断各种情况并加以标识。我只能这样理解了
ref/out引用传递本身没有用到"封箱、拆箱"。
ref/out的dotnet的实现无非就是传递一个‘内存地址’。
比如有一个结构My
struct My
{
public int a, b, c, d;
}
运行后一个My的实例1在内存里的布局将类似(17821540等数字,是内存地址):
17821540:
--> 17821544:a