Diferencia entre boxeo y unboxing en C #

Autor: Laura McKinney
Fecha De Creación: 2 Abril 2021
Fecha De Actualización: 5 Mayo 2024
Anonim
¿Qué es Boxing y UnBoxing?
Video: ¿Qué es Boxing y UnBoxing?

Contenido


En C #, todos los tipos de valor se derivan del objeto de clase. Por lo tanto, una variable de referencia de tipo objeto puede hacer referencia a cualquier otro tipo de valor. C # presenta dos métodos para Boxing y Unboxing, que vincula el tipo de valor al tipo de referencia. La diferencia básica entre Boxing y Unboxing es que Boxing es la conversión del tipo de valor a un tipo de objeto, mientras que, por otro lado, el término Unboxing se refiere a la conversión del tipo de objeto al tipo de valor. Estudiemos las otras diferencias entre Boxing y Unboxing.

  1. Cuadro comparativo
  2. Definición
  3. Diferencias clave
  4. Conclusión

Cuadro comparativo

Bases para la comparaciónBoxeoUnboxing
BásicoEl tipo de objeto se refiere al tipo de valor.proceso de recuperación de valor del objeto en caja.
AlmacenamientoEl valor almacenado en la pila se copia en el objeto almacenado en la memoria de almacenamiento dinámico.El valor de los objetos almacenados en la memoria del montón se copia al tipo de valor almacenado en la pila.
ConversiónConversión implícitaConversión explícita
Ejemploint n = 24;
objeto ob = n;
int m = (int) ob;


Definición de boxeo

El boxeo es un procedimiento para convertir un tipo de valor en un tipo de objeto. Aquí, el tipo de valor se almacena en la pila y el tipo de objeto se almacena en la memoria del montón. Esta conversión del tipo de valor al tipo de objeto es una conversión implícita. Puede asignar directamente un valor a un objeto, y C # se encargará de la conversión restante. Vamos a entender el boxeo con un ejemplo.

int i = 24; objeto ob = i; // Encajona el número entero tipo n en el tipo de objeto ob. u objeto ob1 = 21; // aquí también un tipo de objeto ob1 se refiere a un tipo entero

En el código anterior, el tipo entero i que contiene el valor 24 se almacena en la pila y se copia en el tipo de objeto ob. Un tipo de objeto ahora se refiere a un valor entero. Ahora, el "int i" también contiene el valor 24 y el "tipo de objeto ob" también contiene el valor 24, pero ambos valores son independientes entre sí, es decir, si cambia el valor de i, no reflejará el cambio en el valor de ob.


El boxeo consume memoria adicional junto con tiempo extra. La razón es que un nuevo objeto, que se referirá al tipo de valor, debe asignar el espacio de memoria en el montón. A continuación, el valor del tipo de valor que se almacena en la pila se transferirá a ob el tipo de objeto, en la ubicación de la memoria del montón.

Definición de Unboxing

El reverso de Boxing es Unboxing. Unboxing es una conversión del tipo de objeto al tipo de valor. En Unboxing, el valor del tipo de objeto en caja almacenado en el montón se transfiere al tipo de valor que está almacenado en la pila. A diferencia del boxeo, el Unboxing debe hacerse explícitamente. El tipo de objeto se convierte explícitamente en el tipo de valor, y el tipo de valor debe ser igual al valor al que se refiere el tipo de objeto. Comprendamos el concepto de Unboxing con un ejemplo.

int i = 24; objeto ob = i; // Encajona el número entero tipo n en el tipo de objeto ob. int j = (int) ob; // Desempaquete el valor entero almacenado en el tipo de objeto ob en el tipo entero y.

El valor almacenado en el objeto ob se recupera convirtiéndolo en el tipo al que se refería el objeto, es decir, el tipo entero "j".

Unboxing también consume más memoria y más tiempo. Dado que, cuando un tipo de objeto tiene que ser desempaquetado, el valor del tipo de objeto almacenado en el montón debe transferirse al nuevo tipo de valor almacenado en la pila. El tipo de objeto cuyo valor que se ha recuperado ahora estará disponible para la recolección de basura.

  1. En el boxeo, un objeto se hace referencia como un tipo de valor. Por otro lado, el proceso de recuperar el valor del objeto en caja se llama unboxing.
  2. Un tipo de valor almacenado en una pila se copia al objeto almacenado en la memoria de almacenamiento dinámico. Por otro lado, en unboxing, un objeto almacenado en la memoria del montón se copia a un tipo de valor almacenado en la memoria de la pila.
  3. El boxeo es una conversión implícita, mientras que el unboxing es una conversión explícita.

Conclusión:

Tanto el boxeo como el unboxing consumen más tiempo y memoria, y son computacionalmente caros. También carecen de seguridad de tipo y aumenta la sobrecarga de tiempo de ejecución. Siempre se recomienda evitar el uso excesivo de boxeo y unboxing en el programa.