Recomendado, 2024

Escolha Do Editor

Diferença entre Boxe e Unboxing em C #

Em C #, todos os tipos de valores são derivados do objeto de classe. Portanto, uma variável de referência do tipo type pode se referir a qualquer outro tipo de valor. C # introduz dois métodos para Boxing e Unboxing, que vincula o tipo de valor ao tipo de referência. A diferença básica entre Boxing e Unboxing é que Boxing é a conversão do tipo de valor para um tipo de objeto enquanto, por outro lado, o termo Unboxing se refere à conversão do tipo de objeto para o tipo de valor. Vamos estudar as outras diferenças entre o Boxing e o Unboxing.

Gráfico de comparação

Base para ComparaçãoBoxeUnboxing
BasicTipo de objeto refere-se ao tipo de valor.processo de recuperação de valor do objeto em caixa.
ArmazenamentoO valor armazenado na pilha é copiado para o objeto armazenado na memória heap.O valor do objeto armazenado na memória heap é copiado para o tipo de valor armazenado na pilha.
ConversãoConversão implícita.Conversão explícita.
Exemploint n = 24;
objeto ob = n;
int m = (int) ob;

Definição de Boxe

O boxe é um procedimento de conversão de um tipo de valor para um tipo de objeto. Aqui, o tipo de valor é armazenado na pilha e o tipo de objeto é armazenado na memória heap. Essa conversão do tipo de valor para o tipo de objeto é uma conversão implícita. Você pode atribuir diretamente um valor a um objeto e o C # manipulará a conversão restante. Vamos entender Boxe com um exemplo.

 int i = 24; objeto ob = i; // Box o tipo inteiro n no tipo de objeto ob. ou objeto ob1 = 21; // aqui também um tipo de objeto ob1 se refere a um tipo inteiro 

No código acima, o tipo inteiro i contendo o valor 24 é armazenado na pilha e copiado para o tipo de objeto ob. Um tipo de objeto agora está se referindo a um valor inteiro. Agora, o “int i” também contém o valor 24 e o “tipo de objeto ob” também contém o valor 24, mas ambos os valores são independentes um do outro, ou seja, se você alterar o valor de i, ele não refletirá a mudança no valor de ob.

Boxe consome memória extra junto com o tempo extra. A razão é que um novo objeto, que se referirá ao tipo de valor, deve alocar o espaço de memória no heap. Em seguida, o valor do tipo de valor armazenado na pilha será transferido para o tipo de objeto, no local da memória de heap.

Definição de Unboxing

O reverso do boxe é Unboxing. Unboxing é uma conversão do tipo de objeto para o tipo de valor. Em Unboxing, o valor do tipo de objeto em caixa armazenado no heap é transferido para o tipo de valor armazenado na pilha. Ao contrário do boxe, o Unboxing tem que ser feito explicitamente. O tipo de objeto é explicitamente convertido para o tipo de valor e o tipo de valor deve ser o mesmo valor ao qual o tipo de objeto está se referindo. Vamos entender o conceito de Unboxing com um exemplo.

 int i = 24; objeto ob = i; // Box o tipo inteiro n no tipo de objeto ob. int j = (int) ob; // Unbox o valor inteiro armazenado no tipo de objeto ob para o tipo inteiro y. 

O valor armazenado no objeto ob é recuperado, lançando-o para o mesmo tipo que o objeto estava se referindo, ou seja, o tipo de inteiro "j".

Unboxing também consome mais memória e mais tempo. Desde que, quando um tipo de objeto precisa ser descompactado, o valor do tipo de objeto armazenado no heap deve ser transferido para o novo tipo de valor armazenado na pilha. O tipo de objeto cujo valor foi recuperado estará agora disponível para coleta de lixo.

Principais diferenças entre boxe e unboxing

  1. No boxe, um objeto é feito para se referir como um tipo de valor. Por outro lado, o processo de recuperar o valor de volta do objeto em caixa é chamado de unboxing.
  2. Um tipo de valor armazenado em uma pilha é copiado para o objeto armazenado na memória heap. Por outro lado, no unboxing, um objeto armazenado na memória heap é copiado para um tipo de valor armazenado na memória da pilha.
  3. O boxe é uma conversão implícita, enquanto unboxing é uma conversão explícita.

Conclusão:

Tanto o boxe quanto o unboxing consomem mais tempo e memória, e são computacionalmente caros. Eles também não possuem segurança de tipo e aumentam a sobrecarga de tempo de execução. É sempre aconselhável evitar o uso excessivo de boxe e unboxing no programa.

Top