C#装箱与拆箱介绍和用法示例

2021年5月10日16:04:53 发表评论 833 次浏览

先决条件: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

木子山

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: