当前位置: 首页 > news >正文

建设广告联盟网站idc网站模板源码下载

建设广告联盟网站,idc网站模板源码下载,重庆网站seo优化,长春网站建设5219在C#中,装箱(Boxing)和拆箱(Unboxing) 是值类型与引用类型之间转换的核心机制。它们的实现直接影响程序的性能和类型安全。 一、装箱(Boxing) 定义: 将值类型转换为引用类型&#…

        在C#中,装箱(Boxing)拆箱(Unboxing) 是值类型与引用类型之间转换的核心机制。它们的实现直接影响程序的性能和类型安全。

一、装箱(Boxing)

定义:

值类型转换为引用类型(通常是object或接口类型)的过程

过程:

  1. 堆(Heap)中分配内存,用于存储值类型的副本
  2. 栈(Stack)上的值类型数据复制到堆中
  3. 返回堆中新对象的引用

示例

int value = 1;
object boxed = value; //装箱操作

常见场景

  • 将值类型添加到非泛型集合(如ArrayList)
  • 调用接受object参数的方法时传递值类型

特殊场景

1.Nullable类型(T?)的装箱

  • 如果Nullable<T>的值为null,装箱结果为null
  • 如果有值(如int?i = 1),则装箱其基础类型为(int

2.枚举类型(Enum)的装箱

枚举值会被装箱为底层类型(如int )的实例

性能影响:

  • 堆内存分配和复制操作会带来性能开销
  • 频繁装箱(如循环中)可能会导致内存压力,触发垃圾回收(GC)

二、拆箱

定义:

引用类型(已装箱的值)转换回原始值类型的过程,拆箱的本质是从堆中逐字节复制原始值类型数据到栈

过程:

  1. 检查引用类型是否与目标值类型兼容(否则抛出InvalidCastException)
  2. 将堆中存储的值复制到栈上的值类型变量中

示例

object boxed = 1;
int unboxed = (int)boxed; //拆箱操作

错误示例

object boxed = 1;
double d = (double)boxed; // 抛出 InvalidCastException

错误原因

类型兼容性:CLR(公共语言运行时)会验证引用类型是否与目标值类型完全匹配,装箱的是int,拆箱时目标类型必须也是int,否则抛出InvalidCastException

  • 拆箱的本质是从堆中 逐字节复制原始值类型数据 到栈
  • int 和 double 的内存布局不同:
  • int 是 4 字节整数(如 42 的二进制为 0x0000002A
  • double 是 8 字节浮点数(如 42.0 的二进制为 0x4045000000000000
  • CLR 无法直接将 int 的二进制数据当作 double 解析,必须显式转换

错误修正

  1. 拆箱到原始类型(int
  2. 显式类型转换(int → double

修正后代码:

object boxed = 1;
int unboxedInt = (int)boxed;    // 正确拆箱到 int
double d = (double)unboxedInt;  // 再转换为 double// 或者简写为:
double d = (int)boxed;          // 隐式转换为 double

内存结构

托管堆中的对象:  
[对象头] [同步块索引] [int 数据 = 1]  
↑  
boxed 引用指向此处栈上的 unboxed 变量:  
[int 数据 = 1]

关键点

  • 必须显式指定目标类型(强制类型转换)
  • 拆箱失败会抛出异常,需确保类型匹配
  • 拆箱后需要再次复制数据,仍有性能开销

三、性能优化

1.使用泛型集合

如使用(List<T>)替代非泛型集合(ArrayList)避免装箱

List<int> list = new List<int>(); // 无装箱
list.Add(1);

2.利用接口泛型方法避免装箱

例如,使用IEquatable<T>Equals(T other)方法,而不是object. Equals

3.注意ToString和格式化方法:

int i = 1;
Console.WriteLine(i.ToString()); // 避免装箱(直接调用值类型的ToString)
Console.WriteLine($"{i}"); // 隐式调用 i.ToString(),避免装箱

4.避免在循环或高频代码中装箱/拆箱

5.使用isas安全检查后再拆箱

http://www.dtcms.com/a/402358.html

相关文章:

  • 制作网站要花多少钱网站后台权限管理怎么做的
  • 番禺做网站费用wordpress的按装方法
  • 做网站北京网站建设的广告投入
  • 中高端社交网站建设服务商注册小公司要交税吗
  • 网站开发一个人可以完成吗关于网站规划建设方案书
  • seo网络贸易网站推广博客网站开发
  • 许昌建设局网站郑州seo外包收费标准
  • 云南网站设计哪家好网络营销推广引流方式
  • 课程商城网站模板ios wordpress使用
  • 曲周网站建设网站seo的方法
  • 南京网站建设服务公司字体设计在线生成
  • 建设网站入什么科目巩义网站
  • 怎样在阿里做网站温州最牛叉的seo
  • 做网站犯法了 程序员有责任吗家居设计网站模板
  • 十大中国网站制作网络营销师报名入口
  • 做我的世界背景图的网站信息公开暨网站建设管理办法
  • 网站运行速度优化网站开发 男生
  • 新邵县住房和城乡建设局网站做网站能接到模具单吗
  • 网站建设可视化autohome汽车之家官网
  • 贵州省铁路建设办公室网站内部优惠券网站怎么做
  • 网站免费维护建立网站企业咨询方案
  • 上海有哪些网站设计公司做网站运营的要求
  • 廊坊外贸网站建设2021跨境电商最火的产品
  • 哪里有网站建设定制网站建设分为哪些方面
  • 字体图标制作网站建设证书查询官方网站
  • 辽宁省建设厅网站中级职称公示晚上网站推广软件免费版
  • 网站建设费归入长期待摊费用google推广专员招聘
  • 国外的ps网站餐饮网站建设推广
  • 如何拷贝别人网站的源码西安seo排名扣费
  • 卯兔科技网站建设seo外包公司是啥