装箱和取消装箱

本文详细介绍了C#中的装箱和取消装箱概念,装箱是值类型转换为object或实现的接口的过程,而取消装箱则是从对象中提取值类型。这两个操作涉及到内存分配和强制转换,因此相对于简单赋值,它们可能带来性能开销。示例代码展示了装箱和取消装箱的用法以及可能出现的错误情况,如无效取消装箱会引发InvalidCastException。

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

装箱是将值类转换为 object 型或由此值类实现的任何接口型的程。 见语言运行 (CLR) 对值类 行装箱,会将包装在 System.Object 例中并将其存在托管堆中。 取消装箱将从象中提取值类型。 装箱是式的;取消装箱是式的。 装箱和取消装箱的概念是型系 C# 视图的基,其中任一型的 都被视为一个象。

下例将整型 i 行了装箱并分配给对 o

int i = 123;

 // The following line boxes i.

object o = i;

然后,可以将 o 取消装箱并分配整型 i

o = 123; i = (int)o;

// unboxing

以下示例演示如何在 C# 中使用装箱。

byte[] array = { 0x64, 0x6f, 0x74, 0x63, 0x65, 0x74 };

string hexValue = Convert.ToHexString(array); Console.WriteLine(hexValue);

/*Output: 646F74636574 */

性能

简单赋值而言,装箱和取消装箱程需要行大量的算。 对值类行装箱,必分配并构造一个 象。 取消装箱所需的转换也需要行大量的算,只是程度较轻

装箱

装箱用于在垃圾回收堆中存储值类型。 装箱是值类 object 型或到此值类型所实现的任何接口型的 转换 对值类型装箱会在堆中分配一个例,并将该值复制到新的象中。 看以下值类量的声明:

要在运行成功取消装箱值类型,被取消装箱的一个象的引用,该对象是先前通装箱该值类型的 建的。 尝试取消装箱 null NullReferenceException 尝试取消装箱不兼容值类型的引用会 InvalidCastException

取消装箱

 int i = 123;

// a value type object o = i;

 // boxing int j = (int)o; // unboxing

取消装箱是从 object 型到值类或从接口型到实现该接口的值类型的转换 取消装箱操作包括: 检查对例,以确保它是值类型的装箱 该值例复制到值类量中。 下面的句演示装箱和取消装箱两种操作:

class TestUnboxing { static void Main() {

int i = 123; object o = i;

// implicit boxing try { int j = (short)o;

// attempt to unbox System.Console.WriteLine("Unboxing OK.");

 } catch (System.InvalidCastException e) {

 System.Console.WriteLine("{0} Error: Incorrect unboxing.", e.Message); } } }

 int j = (short) o; int j = (int) o;

下面的示例演示无效的取消装箱及引 InvalidCastException 使用 try catch ,在

错误时显错误 信息。 此程序出: Specified cast is not valid. Error: Incorrect

unboxing. 如果将下列句: 更改 转换,并将得到以下出: Unboxing OK.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值