先决条件:C#中的数据类型
装箱和拆箱是一个重要的概念C#。 C#类型系统包含三种数据类型:值类型(int, char等), 引用类型(对象)和指针类型。基本上, 它将值类型转换为引用类型, 反之亦然。装箱和拆箱可实现类型系统的统一视图, 在该系统中, 任何类型的值都可以视为对象。
在C#中装箱
将值类型(char, int等)转换为引用类型(对象)的过程称为装箱。
装箱是使用对象类型(超级类型)的隐式转换过程。
值类型始终存储在堆栈中。引用类型存储在堆中。
示例:int num = 23; // 23将分配给num对象Obj = num; //装箱
说明:
首先声明一个值类型变量(num), 它是整数类型, 并为其分配值23。现在创建引用对象类型(obj)并应用Explicit操作, 结果将num值类型复制并存储在对象引用类型obj中如下图所示:
让我们来了解
装箱
使用C#编程代码:
//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; //值类型为int并分配了值23 Object Obj = num; // Boxing int i =(int)Obj; //拆箱
说明:
声明值类型变量(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