Partilhar via


Tempo de vida no Visual Basic

O tempo de vida de um elemento declarado é o período de tempo durante o qual está disponível para utilização. As variáveis são os únicos elementos que têm tempo de vida. Para este propósito, o compilador trata parâmetros de procedimento e retornos de função como casos especiais de variáveis. O tempo de vida de uma variável representa o período de tempo durante o qual ela pode manter um valor. O seu valor pode mudar ao longo da sua vida útil, mas tem sempre algum valor.

Diferentes Vidas

Uma variável membro (declarada no nível do módulo, fora de qualquer procedimento) normalmente tem o mesmo tempo de vida que o elemento no qual é declarada. Uma variável não compartilhada declarada em uma classe ou estrutura existe como uma cópia separada para cada instância da classe ou estrutura na qual ela é declarada. Cada uma dessas variáveis tem o mesmo tempo de vida que sua instância. No entanto, uma Shared variável tem apenas um único tempo de vida, que dura todo o tempo em que seu aplicativo está em execução.

Uma variável local (declarada dentro de um procedimento) existe apenas enquanto o procedimento no qual ela é declarada está em execução. Isto aplica-se também aos parâmetros desse procedimento e a qualquer retorno de função. No entanto, se esse procedimento chamar outros procedimentos, as variáveis locais reterão seus valores enquanto os procedimentos chamados estiverem em execução.

Início da Vida

O tempo de vida de uma variável local começa quando o controle entra no procedimento no qual ela é declarada. Cada variável local é inicializada com o valor padrão para seu tipo de dados assim que o procedimento começa a ser executado. Quando o procedimento encontra uma Dim instrução que especifica valores iniciais, ele define essas variáveis para esses valores, mesmo que seu código já tenha atribuído outros valores a elas.

Cada membro de uma variável de estrutura é inicializado como se fosse uma variável separada. Da mesma forma, cada elemento de uma variável de matriz é inicializado individualmente.

As variáveis declaradas dentro de um bloco dentro de um procedimento (como um For loop) são inicializadas na entrada do procedimento. Essas inicializações entram em vigor independentemente de seu código executar ou não o bloco.

Fim da vida útil

Quando um procedimento termina, os valores de suas variáveis locais não são preservados e o Visual Basic recupera sua memória. Na próxima vez que você chamar o procedimento, todas as suas variáveis locais serão criadas novamente e reinicializadas.

Quando uma instância de uma classe ou estrutura termina, suas variáveis não compartilhadas perdem sua memória e seus valores. Cada nova instância da classe ou estrutura cria e reinicializa suas variáveis não compartilhadas. No entanto, Shared as variáveis são preservadas até que o aplicativo pare de ser executado.

Prolongamento da vida útil

Se você declarar uma variável local com a Static palavra-chave, sua vida útil será maior do que o tempo de execução de seu procedimento. A tabela a seguir mostra como a declaração de procedimento determina por quanto tempo uma Static variável existe.

Localização e partilha do procedimento Início do tempo de vida da variável estática Fim do tempo de vida da variável estática
Em um módulo (compartilhado por padrão) A primeira vez que o procedimento é chamado Quando o aplicativo para de ser executado
Em uma classe, Shared (procedure não é um membro da instância) A primeira vez que o procedimento é chamado em uma instância específica ou no próprio nome da classe ou estrutura Quando o aplicativo para de ser executado
Em uma instância de uma classe, não Shared (procedure é um membro da instância) A primeira vez que o procedimento é chamado na instância específica Quando a instância é liberada para coleta de lixo (GC)

Variáveis estáticas com o mesmo nome

Você pode declarar variáveis estáticas com o mesmo nome em mais de um procedimento. Se você fizer isso, o compilador do Visual Basic considera cada uma dessas variáveis como um elemento separado. A inicialização de uma dessas variáveis não afeta os valores das outras. O mesmo se aplica se você definir um procedimento com um conjunto de sobrecargas e declarar uma variável estática com o mesmo nome em cada sobrecarga.

Contendo elementos para variáveis estáticas

Você pode declarar uma variável local estática dentro de uma classe, ou seja, dentro de um procedimento nessa classe. No entanto, você não pode declarar uma variável local estática dentro de uma estrutura, como um membro da estrutura ou como uma variável local de um procedimento dentro dessa estrutura.

Exemplo

Description

O exemplo a seguir declara uma variável com a palavra-chave Static . (Observe que você não precisa da Dim palavra-chave quando a instrução Dim usa um modificador como Static.)

Código

Function runningTotal(ByVal num As Integer) As Integer
    Static applesSold As Integer
    applesSold = applesSold + num
    Return applesSold
End Function

Comentários

No exemplo anterior, a variável applesSold continua a existir depois que o procedimento runningTotal retorna ao código de chamada. A próxima vez runningTotal que for chamada, applesSold retém seu valor calculado anteriormente.

Se applesSold tivessem sido declarados sem usar Statico , os valores acumulados anteriores não seriam preservados nas chamadas para runningTotal. A próxima vez runningTotal que foi chamada, applesSold teria sido recriada e inicializada para 0, e runningTotal teria simplesmente retornado o mesmo valor com o qual foi chamada.

Compilar o código

Você pode inicializar o valor de uma variável local estática como parte de sua declaração. Se você declarar uma matriz como Static, poderá inicializar sua classificação (número de dimensões), o comprimento de cada dimensão e os valores dos elementos individuais.

Segurança

No exemplo anterior, você pode produzir o mesmo tempo de vida declarando no nível do applesSold módulo. No entanto, se alterasse o âmbito de uma variável desta forma, o procedimento deixaria de ter acesso exclusivo à mesma. Como outros procedimentos podem acessar applesSold e alterar seu valor, o total em execução pode não ser confiável e o código pode ser mais difícil de manter.

Consulte também