Recomendado, 2024

La Elección Del Editor

Diferencia entre el boxeo y Unboxing en C #

En C #, todos los tipos de valor se derivan del objeto de clase. Entonces, una variable de referencia de tipo objeto puede referirse a cualquier otro tipo de valor. C # introduce dos métodos para Boxeo y Unboxing, que vinculan 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, en otras manos, el término Unboxing se refiere a la conversión del tipo de objeto al tipo de valor. Estudiemos las otras diferencias entre boxeo y unboxing.

Gráfica comparativa

Bases para la comparaciónBoxeoUnboxing
BASICTipo 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 al objeto almacenado en la memoria del montón.El valor del objeto almacenado en la memoria del montón se copia al tipo de valor almacenado en la pila.
ConversiónConversión implícita.Conversió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 de tipo de valor al tipo de objeto es una conversión implícita. Puede asignar directamente un valor a un objeto, y C # manejará la conversión del resto. Vamos a entender el boxeo con un ejemplo.

 int i = 24; objeto ob = i; // Boxea el tipo entero 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 al 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 contienen el valor 24, pero ambos valores son independientes entre sí, es decir, si cambia el valor de i, no reflejará el cambio en la valor de ob.

El boxeo consume memoria extra junto con el 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 del boxeo 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 tiene que hacerse explícitamente. El tipo de objeto se convierte explícitamente al tipo de valor, y el tipo de valor debe ser el mismo que el valor al que se refiere el tipo de objeto. Entendamos el concepto de Unboxing con un ejemplo.

 int i = 24; objeto ob = i; // Boxea el tipo entero n en el tipo de objeto ob. int j = (int) ob; // Desmarca el valor entero almacenado en el tipo de objeto ob al tipo entero y. 

El valor almacenado en el objeto ob se recupera convirtiéndolo en el mismo 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 sin caja, entonces 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.

Las diferencias clave entre el boxeo y Unboxing

  1. En el boxeo, un objeto se hace para referirse 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 del montón. Por otro lado, en unboxing, un objeto almacenado en la memoria del montón se copia en un tipo de valor almacenado en la memoria de la pila.
  3. El boxeo es una conversión implícita, mientras que, unboxing es una conversión explícita.

Conclusión:

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

Top