Sobes.tech
Middle

O que é boxing e unboxing em C# e como evitar esses processos?

sobes.tech IA

Resposta da IA

A embalagem (boxing) é a conversão implícita do tipo de valor para um tipo de referência object ou qualquer outro tipo de referência derivado de object. Nesse processo, o valor é colocado em uma nova área de memória no heap gerenciado.

O desembrulhamento (unboxing) é a conversão explícita de um tipo de referência object para um tipo de valor. Primeiro, verifica-se se o objeto é uma instância do tipo de valor desejado, e então seu campo de dados é copiado do heap.

Exemplos:

// Embalagem (boxing)
int valorTipo = 10;
object referenciaTipo = valorTipo; // valorTipo é embalado em um object

// Desembrulhamento (unboxing)
int valorDesembrulhado = (int)referenciaTipo; // referenciaTipo é desembrulhado em int

Evitar embalagem e desembrulhamento pode ser feito usando genéricos. Coleções e métodos genéricos trabalham diretamente com tipos de valor, sem necessidade de conversão para object. Isso melhora o desempenho e a segurança de tipos.

Exemplo com genéricos:

// Uso de List<T> ao invés de ArrayList
using System.Collections.Generic;

List<int> listaGenérica = new List<int>();
listaGenérica.Add(10); // Sem embalagem

int valor = listaGenérica[0]; // Sem desembrulhamento

O uso de genéricos previne custos associados à alocação de memória no heap e à cópia de dados durante embalagem/desembalagem, além de evitar erros de tipo em tempo de execução.