有关ref和out原理问题?

想问一下大佬们,ref和out是把值类型转化为引用类型了吗?按理来说值类型就是值类型,怎么会转为引用类型?能不能详细讲解一下!感谢!!!封箱、拆箱https://www.cnblogs.com/kdp0213/p/8533408.html参数是什么类型还是什么类型,不会改变的引用类型不用ref或out,都是在堆上,改变了数据就会影响原来的而值类型不用的话就会重新分配一个地址,用上了就用原来的地址不要太深究。Object是万物的基类。值类型和引用类型都派生自Object。而Object自
摘要由CSDN通过智能技术生成

想问一下大佬们,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

    

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值