Requisito previo: Tipos de datos en C#
Boxing y unboxing son conceptos importantes en C# . El sistema de tipos de C# contiene tres tipos de datos : tipos de valor (int, char, etc.) , tipos de referencia (objeto) y tipos de puntero . Básicamente, Boxing convierte una variable de tipo de valor en una variable de tipo de referencia, y Unboxing logra lo contrario. Boxing y Unboxing permiten una vista unificada del sistema de tipos en el que un valor de cualquier tipo se puede tratar como un objeto.
Boxeo en C#
- El proceso de convertir una variable de tipo de valor (char, int, etc.) en una variable de tipo de referencia (objeto) se denomina boxeo .
- El boxeo es un proceso de conversión implícito en el que se utiliza el tipo de objeto (supertipo).
- Las variables de tipo de valor siempre se almacenan en la memoria de la pila, mientras que las variables de tipo de referencia se almacenan en la memoria del montón.
- Ejemplo :
int num = 23; // 23 will assigned to num Object Obj = num; // Boxing
- Descripción: Primero, declaramos una variable de tipo de valor num del tipo int y la inicializamos con el valor 23. Ahora, creamos una variable de tipo de referencia obj del tipo Object y le asignamos num . Esta asignación da como resultado implícitamente que la variable de tipo de valor num se copie y almacene en la variable de tipo de referencia obj , como se muestra en la siguiente figura:
- Entendamos el boxeo con un código de programación C#:
Csharp
// 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); } }
Producción:
Value - type value of num is : 100 Object - type value of obj is : 2020
Desembalaje en C#
- El proceso de convertir una variable de Tipo de referencia en una variable de Tipo de valor se conoce como Unboxing .
- Es un proceso de conversión explícito.
- Ejemplo :
int num = 23; // value type is int and assigned value 23 Object Obj = num; // Boxing int i = (int)Obj; // Unboxing
- Descripción: Declaramos una variable de tipo de valor num , que es del tipo int y le asignamos el valor entero 23. Ahora, creamos una variable de tipo de referencia obj del tipo Object , en la que encuadramos la variable num. Ahora, creamos un valor de tipo entero i para desempaquetar el valor de obj. Esto se hace usando el método de conversión, en el que especificamos explícitamente que obj debe convertirse como un intvalor. Por lo tanto, la variable Tipo de referencia que reside en la memoria del montón se copia a la pila como se muestra en la siguiente figura:
- Entendamos el Unboxing con un código de programación C#:
Csharp
// 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); } }
Producción:
Value of ob object is : 23 Value of i is : 23
- En casos como el desempaquetado de un objeto nulo o la conversión del objeto como un tipo de datos incompatible, el programa genera excepciones.