📜  C#|装箱与拆箱

📅  最后修改于: 2021-05-30 01:02:34             🧑  作者: Mango

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