Compreendendo o escopo no Visual Basic .NET

programas VB.NET são subdivididas em zonas, assim como os Estados Unidos é dividido em estados, condados e cidades. Assim como agentes da lei têm diferentes tamanhos de jurisdições (polícia da cidade, soldados do estado, e FBI, que podem ir em qualquer lugar), linhas VB.NET de programação têm escalas de influência. Esta gama de influência, chamado escopo,

se aplica principalmente para variáveis ​​(mas também pode ser aplicado a procedimentos - subs e funções -, bem como as classes inteiras).

Acessando uma variável

Muitas vezes você deseja consultar ou alterar o valor em uma variável, mas se ou não essa variável é acessível a você depende do seu âmbito. Por exemplo, você sempre pode acessar uma variável a partir de dentro o mesmo procedimento (funções, sub-rotinas e eventos são todos os procedimentos).

Para ver como isso funciona, digite o seguinte em seu módulo de código:

Private Sub Form1_Load (ByVal sender As System.Object, ByVal e As System.EventArgs) Alças MyBase.Load
Dim N As String = "Este"
MsgBox (N)
End Sub

Pressione F5 e observe que o MsgBox não tem nenhum problema exibindo o valor da variável N.

Ele exibe Este. Agora digite outra sub logo abaixo da sub Form1_Load na janela de código:

Sub pública TryIt ()
MsgBox (N)
End Sub

Note-se que há uma linha de dente de serra sob o N variável na sub TryIt. Mantenha o ponteiro do mouse em cima da linha de dente de serra e VB.NET exibe uma mensagem de erro informando que Nome 'N' não está declarado.

Esta mensagem de erro significa que as linhas de código dentro do sub TryIt (entre Sub Pública e End Sub) não pode ler (acesso) ou escrever (mudança) a N. variável N foi declarado (com o comando Dim) em um processo separado, e de modo que o âmbito de N (a sua gama de acessibilidade) está limitado a linhas de código dentro dela mesmo procedimento.

Embora Dim é o mais comumente utilizado, você pode usar sete comandos de declaração adicionais: estático, público, protegido, amigo, Compartilhados, Protected Friend, e privados. Estes comandos adicionais especificar escopo (a partir do qual os locais em seu programa uma variável pode ser acessado).

Observe que quando você declarar uma variável dentro de um procedimento, a variável funciona somente dentro desse procedimento. Quando o programa é executado o procedimento (ou evento), a variável trata de vida, faz o seu lugar, e, em seguida, morre (desaparece) assim como a linha End Sub é executado.

Quando as variáveis ​​são locais

Variáveis ​​que vivem somente dentro de um único procedimento são chamados variáveis ​​locais. As variáveis ​​locais têm duas qualidades que você precisa para memorizar:

  • Nenhuma programação fora do seu próprio procedimento pode interagir com eles, seja para ler o seu valor ou para alterar seu valor. O seu âmbito é limitado a seu próprio procedimento.
  • Quando VB termina a execução do procedimento em que residem, o seu valor evapore. Se esse procedimento é executado uma segunda vez, o valor que a variável local, uma vez contido não está mais lá. Uma execução do procedimento é o seu tempo de vida.
  • Existem algumas situações em que você quer o valor de uma variável local a ser preservado. Nesses casos, você usa o comando estático em vez do comando Dim:

Private Sub Form1_Load (ByVal sender As System.Object, ByVal e As System.EventArgs) Alças MyBase.Load

Dim n As Integer

x estáticos As Integer

End Sub

Neste exemplo, a variável n perde o seu valor quando o End Sub é executado. No entanto, a variável x mantém seu valor até que o programa é encerrado. Outra maneira de colocá-lo é esta: Quando você usa o comando estático com uma variável local, o valor dessa variável é preservado para a vida de sua aplicação. (Lifetime significa quanto tempo alguma coisa está na existência de um programa.)

O que você acha que aconteceria se você colocar dois botões de comando em seu formulário e, em seguida, executou o programa e clicar Command1 primeiro lugar, e em seguida, clicar Command2, neste próximo programa?

Private Sub Button1_Click (ByVal sender As System.Object, ByVal e As System.EventArgs) Alças Button1.Click
Dim X As Integer
X = 12
X = X + 5
End Sub
Private Sub Button2_Click (ByVal sender As System.Object, ByVal e As System.EventArgs) Alças Button2.Click
Dim X As Integer
MsgBox (X)
End Sub

A caixa de mensagem exibe nada. A variável X no evento Click de Command1 é uma variável completamente diferente do X no evento Click de Command2. Eles são de âmbito local e simplesmente não têm nenhuma relação com o outro, não mais do que dois estranhos chamado Mike que acontecerá a viver no Bronx e nunca se encontram.

Mas e se você quiser ambos os procedimentos para ser capaz de acessar e manipular a mesma variável? Para fazer isso, você define a variável fora dos seus procedimentos. Tente. Clique logo acima do primeiro procedimento (apenas acima da linha Private Sub Form1_Load) na janela de código para mover o cursor de inserção lá.

Agora digite o seguinte:

Dim x As Integer

É aí que você quer colocar todas as variáveis ​​que você quer dar escopo em todo o formulário - em outras palavras, para permitir a todos os procedimentos necessários nesse formulário (Form1, neste caso) para ser capaz de ler e modificar a variável. (A área onde você coloca variáveis ​​de todo o formulário usado para ser chamado de área de declarações geral, antes de VB.NET).

Agora, com essa variável X esmaecido até lá acima (fora) todos os Subs e outros procedimentos, quando você executar o mesmo programa, clique em Command1 e clique em Command2, você vê o resultado que você quer ver: o número 17. Quando você declara x como sendo à escala forma no espaço, os dois botões pode acessar essa variável X. Eliminar as duas declarações Dim que tenham sido previamente declarados X dentro desses dois eventos de botão. Agora X = X + 5 e MsgBox (X), ambas se referem à mesma variável chamada X.

Quando uma variável tem escopo em todo o formulário, é, então, disponível para todos os procedimentos nessa forma. Ele não está disponível, no entanto, para os procedimentos em quaisquer outras formas no projeto.

menu