VB.NET - Box e Unboxing
Boxing e Unboxing é um conceito essencial no sistema de tipos do
VB.NET (C# também).
Mas o que vem a ser isto de boxing e unboxing ? |
Podemos traduzir
boxing como empacotar e unboxing como desempacotar mas creio que
o melhor mesmo é nos referirmos aos termos originais box e
unboxing pois será assim que serão referenciados na literatura
e em artigos.
Para você entender estes conceitos vou dar uma pincelada no sistema de tipos usado no .NET.
Como você já deve saber o VB.NET agora é uma linguagem orientada a objetos e podemos dizer que tudo no VB.NET são objetos. Seguindo esta linha de raciocínio podemos dizer também que em .NET todo o tipo é derivado da classe System.Object.
O fato de tudo ser um objeto traz alguns problemas que podem afetar o desempenho. Vamos pensar na operação matemática da soma de dois números , 1 +2 , por exemplo.
Para realizar esta operação , se tudo for considerado um objeto , teremos que criar um objeto para representar o número 1 e outro objeto para representar o número 2 , somar os dois e colocar o resultado em outro objeto.
Um tanto complicado não é mesmo ???
A linguagem Java contornou este programa definindo os tipos por referência que são objetos e os tipos primitivos (int, char,boolean byte, etc..) que não são objetos e que guardam apenas os valores de seus dados.
Como não são objetos os tipos primitivos não possuem métodos . Isto levou a criação das classes invólucros(wrappers) destes tipos primitivos que transformam os tipos primitivos em tipos por referência.
Só tem um problema em tudo isto : quem tem que fazer este serviço é você , o programador.
E como o problema foi contornado na plataforma .NET ?
Se você respondeu box e unboxing , acertou !
Para resolver este problema foi organizado o sistema de tipos de duas formas:
Organizando o sistema de tipos desta forma , apenas os tipos referência seriam alocados na memória heap, enquanto os tipos valor iriam para a pilha. Tipos primitivos como int, float e char não precisam ser alocados na memória heap, agilizando, assim, a sua manipulação.
Mas onde entra o tal de box e unboxing ?
A razão de se criar uma origem comum de tipos é para facilitar a interação entre tipos valor e referência.
O processo de conversão explícita de um tipo valor para um tipo referência é conhecido em .NET como Boxing (empacotar).
O processo contrário a Boxing é conhecido como Unboxing. Nesse caso, o compilador verifica se o tipo por valor a receber o conteúdo do tipo referência é equivalente a este último.
No processo de Boxing, o que de fato está acontecendo é que um novo objeto está sendo alocado na memória heap e o conteúdo da variável de tipo valor é copiado para a área de memória referenciada por esse objeto.
Exemplos:
Class
Teste Shared Sub Main() Console.WriteLine(5.ToString()) End Sub End Class |
Perceba
que neste exemplo eu estou chamando o método ToString()
para um valor inteiro. O que esta acontecendo por trás dos panos ??? |
Abaixo temos o exemplo mais claro de boxing e unboxing.
Class
Teste2 Shared Sub Main() Dim i As Integer = 1 Dim o As Object = i 'aqui estou fazendo o boxing Dim j As Integer = Cint(o) 'aqui estou fazendo o unboxing End Sub End Class |
Public
Class Teste3 { Static void Main() { int intNumero = 100; // Faz o boxing para o tipo referencia. Object objNumero = intNumero; // Faz o unboxing para o tipo valor int intValor = (int) objNumero; } } |
Exemplo em VB.NET | Exemplo em C# |
A nova versão do Java (Tiger) traz como uma das novidades o box e unboxing.
Até mais ...
Referências:
Super DVD Vídeo Aulas - Vídeo Aula sobre VB .NET, ASP .NET e C#
VB .NET - Lendo Arquivos Binários - BinaryReader - Macoratti ...
Tratamento de arquivos - Questões práticas - Macoratti.net
C# - Copiando Arquivos - Macoratti
C# - Localizando linhas em um arquivo texto - Macoratti.net
VB .NET - Armazenando um objeto serializado em um arquivo
C# - Programa para Loja de Instrumentos Musicais - Macoratti ...
C# - Lendo e gravando dados binários no SQL ... - Macoratti