首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在C#中,哪一个包含装箱和取消装箱策略、数组还是数组?

在C#中,哪一个包含装箱和取消装箱策略、数组还是数组?
EN

Stack Overflow用户
提问于 2014-05-20 04:40:20
回答 3查看 1.9K关注 0票数 2

以下哪一种使用BoxingUnboxing策略?

  • 数组
  • ArrayList
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-05-20 04:50:20

数组列表不是强类型集合。它将存储不同数据类型或相同数据类型的值。因此,数组列表使用装箱解除装箱技术。

代码语言:javascript
复制
Boxing

值类型(int、char等)的隐式转换对于一个引用类型(对象),称为Boxing。

代码语言:javascript
复制
Unboxing

相同引用类型的显式转换(可以通过装箱过程创建);返回到值类型称为取消装箱。

代码语言:javascript
复制
Exp-

// int (值类型)是在堆栈上创建的

代码语言:javascript
复制
int stackVar = 12; 

// the = int在堆上创建(引用类型)

代码语言:javascript
复制
object boxedVar = stackVar; 

// unboxed = boxed从堆中取消装箱,并分配给int堆栈变量

代码语言:javascript
复制
int unBoxed = (int)boxedVar;

避免拳击

票数 1
EN

Stack Overflow用户

发布于 2014-05-20 04:53:38

当值类型被移动到引用类型时,它被称为装箱。反之亦然,被称为“去拳击”。

下面是装箱和取消装箱的示例代码,其中整数数据类型转换为object,反之亦然。

代码语言:javascript
复制
int i = 1;
object obj = i; // boxing
int j = (int) obj;  // unboxing

最好避免在必须对值类型进行大量装箱的情况下使用值类型,例如在非泛型集合类(如System.Collections.ArrayList )中。通过使用泛型集合(如System.Collections.Generic.List ),可以避免对值类型进行装箱。装箱和取消装箱是计算开销很大的进程。当一个值类型被装箱时,必须创建一个全新的对象。这可能需要比简单的参考作业长20倍。当解除装箱时,铸造过程可能要花费任务时间的四倍。

相关主题

http://msdn.microsoft.com/en-IN/library/ms173196.aspx

http://msdn.microsoft.com/en-IN/library/yz2be5wk.aspx

http://questpond.blog.com/2014/03/04/net-interview-questions-what-is-concept-of-boxing-and-unboxing

票数 0
EN

Stack Overflow用户

发布于 2014-05-20 05:54:59

在使用ArrayList时,与装箱和取消装箱相比,数组具有更多的开销,并且比ArrayList强类型,效率更高。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23751135

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档