Diferença entre boxe e unboxing em c #

Autor: Laura McKinney
Data De Criação: 2 Abril 2021
Data De Atualização: 5 Poderia 2024
Anonim
Diferença entre boxe e unboxing em c # - Tecnologia
Diferença entre boxe e unboxing em c # - Tecnologia

Contente


Em C #, todos os tipos de valor são derivados do objeto de classe. Portanto, uma variável de referência do tipo objeto pode se referir a qualquer outro tipo de valor. O C # apresenta dois métodos para Boxe e Unboxing, que vinculam 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 em um tipo de objeto, enquanto, por outro lado, o termo Unboxing refere-se à conversão do tipo de objeto no tipo de valor. Vamos estudar as outras diferenças entre boxe e unboxing.

  1. Gráfico de comparação
  2. Definição
  3. Principais diferenças
  4. Conclusão

Gráfico de comparação

Base para ComparaçãoBoxeDesembalagem
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 dos objetos armazenados 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

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 o boxe com um exemplo.

int i = 24; objeto ob = i; // Coloque o tipo inteiro n no 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 que contém 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 alteração no valor de ob.


O boxe consome memória extra junto com tempo extra. O motivo é que um novo objeto, que fará referência ao tipo de valor, deve alocar o espaço de memória na pilha. Em seguida, o valor do tipo de valor armazenado na pilha será transferido para o tipo de objeto, no local da memória heap.

Definição de Unboxing

O inverso do boxe é unboxing. Desembalar é uma conversão do tipo de objeto para o tipo de valor. Em Desembalagem, o valor do tipo de objeto em caixa armazenado na pilha é transferido para o tipo de valor armazenado na pilha. Ao contrário do Boxe, o Unboxing deve ser feito explicitamente. O tipo de objeto é convertido explicitamente no tipo de valor e o tipo de valor deve ser igual ao 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; // Coloque o tipo inteiro n no objeto ob. int j = (int) ob; // Desmarque o valor inteiro armazenado no tipo de objeto ob para o tipo inteiro y.

O valor armazenado no objeto ob é recuperado convertendo-o para o mesmo tipo que o objeto estava se referindo, isto é, o tipo inteiro "j".

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

  1. No boxe, um objeto é criado 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 o unboxing é uma conversão explícita.

Conclusão:

Tanto o boxe como 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 do tempo de execução. É sempre aconselhável evitar o uso excessivo de boxe e unboxing no programa.