先决条件:C#中的数据类型
装箱和拆箱是C#中的重要概念。 C#类型系统包含三种数据类型:值类型(int,char等) ,引用类型(对象)和指针类型。基本上,它将值类型转换为引用类型,反之亦然。装箱和拆箱可实现类型系统的统一视图,在该系统中,任何类型的值都可以视为对象。
在C#中装箱
- 将值类型(char,int等)转换为引用类型(对象)的过程称为Boxing 。
- 装箱是使用对象类型(超级类型)的隐式转换过程。
- 值类型始终存储在堆栈中。引用类型存储在堆中。
- 例子 :
int num = 23; // 23 will assigned to num Object Obj = num; // Boxing
- 描述:首先声明一个值类型变量(num),它是整数类型,并为其分配值23。现在创建一个引用对象类型(obj)并应用Explicit操作,结果将num值类型复制并存储在对象引用中键入obj,如下图所示:
- 让我们用C#编程代码了解Boxing:
// C# implementation to demonstrate // the Boxing using System; class GFG { // Main Method static public void Main() { // assigned int value // 2020 to num int num = 2020; // boxing object obj = num; // value of num to be change num = 100; System.Console.WriteLine ("Value - type value of num is : {0}", num); System.Console.WriteLine ("Object - type value of obj is : {0}", obj); } }
输出:Value - type value of num is : 100 Object - type value of obj is : 2020
在C#中取消装箱
- 将引用类型转换为值类型的过程称为拆箱。
- 这是显式转换过程。
- 例子 :
int num = 23; // value type is int and assigned value 23 Object Obj = num; // Boxing int i = (int)Obj; // Unboxing
- 描述:声明一个值类型变量(num),它是整数类型并分配有整数值23。现在,创建参考对象类型(obj)。装箱的显式操作将创建一个值类型整数i并应用转换方法。然后,将驻留在Heap上的引用类型复制到堆栈,如下图所示:
- 让我们了解使用C#编程代码进行拆箱:
// C# implementation to demonstrate // the Unboxing using System; class GFG { // Main Method static public void Main() { // assigned int value // 23 to num int num = 23; // boxing object obj = num; // unboxing int i = (int)obj; // Display result Console.WriteLine("Value of ob object is : " + obj); Console.WriteLine("Value of i is : " + i); } }
输出:Value of ob object is : 23 Value of i is : 23