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

佛山购物网站建设武汉百度推广代运营

佛山购物网站建设,武汉百度推广代运营,无极在线网站播放,企业自己怎么做网站推广在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/wzjs/343629.html

相关文章:

  • 科技馆网站建设方案seo外链技巧
  • 班级网页模板html源码seo优化方式
  • 软件开发怎么自学seo精准培训课程
  • 安监局网站建设网站seo策划方案
  • 网站建设培训西安大数据营销是什么
  • 可以免费做3dLOGO的网站国外域名注册网站
  • 网站开发师是做什么的免费开通网站
  • 福田网站建设设计电销外包团队在哪找
  • 经典手机网站营销型网站外包
  • 中原区快速建站公司电话个人发布信息的免费平台
  • 网站优化 seo和sem河南疫情最新情况
  • 建设银行网站登录不上去网络运营师
  • 徐州做网站的公司哪些好网站推广怎么弄
  • 做网站怎么找客户seo数据优化教程
  • 北京网站推广技巧seo排名查询工具
  • 北京新鸿儒做的网站网站seo排名优化价格
  • 网站产品二级分类泰安seo培训
  • 如何做白日梦的网站深圳网络营销公司
  • 怎么在app中嵌入h5页面青岛官网seo方法
  • 中国做视频网站有哪些常用的营销方法和手段
  • 公司网站建设费用会计入账黄页推广2021
  • 手机上怎样制作网站友链交易交易平台
  • seo技术培训南阳优化防控措施
  • 网站运维是做什么的有没有专门做策划的公司
  • 深圳网站建设深圳网络app推广方式有哪些
  • 想自己做网站需要会什么河南平价的seo整站优化定制
  • 最专业的网站建设seo优化服务公司开发一个小程序一般需要多少钱呢
  • 做网站用到的java技术我要发布信息
  • ps做的网站2345网址导航怎么下载
  • 石家庄网站托管公司自建网站平台有哪些