3.5 C#值类型与引用类型的转换——装箱与拆箱

本文详细解析了装箱和拆箱的概念,装箱是从值类型转换为引用类型的过程,涉及内存分配、值复制和地址引用;拆箱则是相反过程,从引用类型转换为值类型,仅需查找地址并复制。文章强调了装箱操作的复杂性,并建议使用List<T>代替ArrayList以减少装箱带来的性能开销。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

装箱

表示值->引用,一般在ArrayList.Add(int a)时,会将a复制一份引用类型的数值,添加到ArrayList中。装箱分以下步骤:

1. 在托管堆中分配内存(包括类型对象指针和同步索引块)

2. 复制值

3. 返回地址引用

拆箱

表示从引用->值,比如int a=ArrayList[Index],这行代码分两步:

1. 拆箱,在托管堆中找到需要复制的字段地址

2. 从托管堆中复制到线程栈上

可以看出拆箱只要找地址,而装箱分三步,更复杂,所以一般少用回触发装箱机制的ArrayList而用List<T>

在拆箱时,只能拆成原类型,否则就会抛出异常,如string a= ArrayList[Index],这就会抛出InvalidCastException

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值