.NET - Conceitos: memória da aplicação , Stack , Heap e variáveis.

A memória do seu computador é o local físico onde são colocados as instruções e dados que o microprocessador pode processar. Quando o seu computador esta em operação normal esta memória contém muitas partes do sistema operacional e alguns programas de aplicações e dados relacionados que estão sendo usados.

A memória da aplicação é porção da memória do computador alocado pelo sistema operacional para rodar a aplicação. Esta memória pode ser alocada em duas partes : stack e heap.

Uma variável é um local na memória ao qual demos um nome.   Você declara uma variável definindo um nome a um local na memória e definindo o tipo de dados que pode ser usado com a variável . Ex: Dim nome As String.

Um tipo de dados é um conjunto de valores que a variável pode assumir. Como exemplo de tipos de dados podemos citar : Integer , String , Boolean , Button , TextBox , Form , etc.

Dim intValor As Integer   = declara uma variável chamada intValor do tipo Integer

No VB.NET os tipos de dados podem ser classificados em tipos de dados por valor e tipos de dados por referência. A seguir alguns tipos de dados e sua classificação:

Tipos de dados por Valor = Byte , Integer , Single , Double , Boolean , Char , Struct , Enum

Tipos de dados por referência = Array , Button , Form , DataSet , Font

A categoria do tipo de dados determina como ele será alocado na memória.

Tipos de dados por valor

Uma variável declarada como um tipo de dados por valor é estruturada na memória para conter um valor diretamente. Vejamos :

- Um Integer é um tipo de dados por valor

Dim intValor As Integer
intValor = 1

Depois de rodar o código acima o resultado é uma variável na memória chamada intValor que contém o valor 1 diretamente

Tipos de dados por referência

Uma variável declara como um tipo de dados por referência é estruturada para conter uma referência para um objeto atual na HEAP. Uma referência é um endereço de memória onde um objeto existe na Heap.

- Um Button é um tipo de dados por referência

Dim mButton As Button

Depois de rodar o código acima o resultado é uma variável na memória chamada mButton que contém uma referência para um objeto button na heap. Neste momento o valor da variável  mButton é null.

mButton = New Button()

A linha de código acima , depois de executada , fará com que a variável mButton contenha uma referência a um objeto Button na Heap.

A referência é um valor inteiro que indica o endereço onde o objeto Button começa na heap.

Agora acho que já deu para você entender o que esta ocorrendo quando temos a mensagem de erro :

An unhandled exception of "System.NullReferenceException" occurred...

Este erro ocorre quando uma tentativa e feita para usar uma variável de referência que foi declarada mas não possui ainda uma referência para o objeto atual. A variável contém uma referência NULL . Para provocar o erro basta executar o código abaixo:

1  Dim mButton As Button
2  mButton.ForeColor = Color.White

- A primeira linha de código declara a variável mButton como um tipo por referência que pode conter uma referência para um objeto Button.
- A segunda linha tenta usar mButton antes que uma referência seja atribuída ao objeto button. O que teremos na memória é o seguinte :

O interpretador não pode encontrar um objeto Button na variável mButton e então dispara a exceção. Existe um NULL armazenado na variável mButton e não uma referência a um objeto button na Heap.

Para corrigir o problema basta declarar : mButton = new Button() antes de tentar alterar a cor do botão.

Até o próximo artigo VB.NET!!! 


José Carlos Macoratti