📜  c#中的装箱和拆箱(1)

📅  最后修改于: 2023-12-03 14:39:48.742000             🧑  作者: Mango

C#中的装箱和拆箱

在C#中,装箱和拆箱是两个常见的操作,它们用于将值类型转换为引用类型和将引用类型转换为值类型。

装箱(Boxing)

装箱是将值类型转换为引用类型的过程。当将值类型存储在堆中时,需要将其装箱。

int i = 10;
object obj = i; // 装箱

上面的代码中,将整型变量i装箱为object类型,这是因为object是引用类型,而i是值类型。

另外,使用Convert方法也可以将值类型装箱为引用类型:

int i = 10;
object obj = Convert.ChangeType(i, typeof(object));
拆箱(Unboxing)

拆箱是将引用类型转换为值类型的过程。当从堆中检索值类型时,需要将其拆箱。

object obj = 10; // 装箱
int i = (int)obj; // 拆箱

上面的代码中,将整型值10装箱为object类型,然后将其拆箱为整型变量i

同样地,使用Convert方法也可以将引用类型拆箱为值类型:

object obj = 10; // 装箱
int i = Convert.ToInt32(obj); // 拆箱
装箱和拆箱的性能

装箱和拆箱的性能消耗很大,因此在编写高性能的代码时应避免过多使用这两个操作。

装箱和拆箱的性能差异取决于值类型和引用类型之间的转换频率。当进行高频转换时,性能损失更为明显。

总结

装箱和拆箱是C#中的常见操作,用于将值类型转换为引用类型和将引用类型转换为值类型。在编写高性能的代码时应避免过多使用这两个操作。