Instrução Dim (Visual Basic)
Declara e aloca espaço para uma ou mais variáveis.
[ <attributelist> ] [ accessmodifier ] [[ Shared ] [ Shadows ] | [ Static ]] [ ReadOnly ]
Dim [ WithEvents ] variablelist
Partes
Termo |
Definição |
||||||||||||||||||
attributelist |
Opcional. Veja Lista de Atributos. |
||||||||||||||||||
accessmodifier |
Opcional. Pode ser um dos seguintes: |
||||||||||||||||||
Shared |
Opcional. Consulte Compartilhada. |
||||||||||||||||||
Shadows |
Opcional. Veja Shadows. |
||||||||||||||||||
Static |
Opcional. Consulte Estático. |
||||||||||||||||||
ReadOnly |
Opcional. Consulte Readonly. |
||||||||||||||||||
WithEvents |
Opcional. Especifica que esses são variáveis de objeto referindo-se instâncias de uma classe que pode gerar eventos. Consulte WithEvents. |
||||||||||||||||||
variablelist |
Obrigatório. Lista de variáveis que estão sendo declarados em essa declaração. variable [ , variable ... ] Cada variable possui a seguinte sintaxe e partes: variablename [ ( [ boundslist ] ) ] [ As [ New ] datatype [ With { [ .propertyname = propinitializer [ , ... ] ] } ] ] [ = initializer ]
|
Comentários
O compilador do Visual Basic usa a declaração de Dim para determinar informações de variável e o tipo de dados, como o código que pode acessar a variável. O exemplo a seguir declara uma variável para armazenar um valor de Integer .
Dim numberOfStudents As Integer
Você pode especificar qualquer tipo de dados ou o nome de uma enumeração, estrutura, Classe ou interface.
Dim finished As Boolean
Dim monitorBox As System.Windows.Forms.Form
Para um tipo de referência, use a palavra-chave de New para criar uma nova instância da classe ou estrutura que é especificada pelo tipo de dados. Se você usar New, você não usar uma expressão inicializadora. Em vez de isso, você fornecer argumentos, se for necessário, ao construtor da classe que você está criando a variável.
Dim bottomLabel As New System.Windows.Forms.Label
Você pode declarar uma variável em um procedimento, bloquear, classe, estrutura, módulo ou. Você não pode declarar uma variável em um arquivo fonte, namespace, em ou em uma interface. Para obter mais informações, consulte Contextos de declaração e níveis de acesso padrão (Visual Basic).
Uma variável que é declarada no nível de módulo, fora de qualquer procedimento, é uma variável de membro ou campo. Variáveis de membros estão no escopo em seu classe, estrutura, módulo ou. Uma variável que é declarada no nível de procedimento é uma variável local. Variáveis locais estão no escopo somente dentro do procedimento ou bloco.
os seguintes modificadores de acesso são usados para declarar variáveis fora de um procedimento: Public, Protected, Friend, Protected Friend, e Private. Para obter mais informações, consulte Níveis de acesso no Visual Basic.
A palavra-chave de Dim é opcional e omitido geralmente se você especificar qualquer um dos modificadores: Public, Protected, Friend, Protected Friend, Private, Shared, Shadows, Static, ReadOnly, ou WithEvents.
Public maximumAllowed As Double
Protected Friend currentUserName As String
Private salary As Decimal
Static runningTotal As Integer
Se Option Explicit é on (o padrão), o compilador requer uma declaração para cada variável que você usar. Para obter mais informações, consulte Instrução Option Explicit (Visual Basic).
especificando um valor inicial
Você pode atribuir um valor a uma variável quando é criado. Para um tipo de valor, você usa um inicializador para fornecer uma expressão a ser atribuída à variável. A expressão deve ser avaliada como uma constante que pode ser calculada em tempo de compilação.
Dim quantity As Integer = 10
Dim message As String = "Just started"
Se um inicializador é especificado e um tipo de dados não é especificado em uma cláusula de As , inferência de tipos é usada para inferir o tipo de dados de inicializador. Em o exemplo, num1 e num2 são altamente digitados como inteiros. Em a segunda declaração, inferência de tipos infere o tipo de valor 3.
' Use explicit typing.
Dim num1 As Integer = 3
' Use local type inference.
Dim num2 = 3
Inferência de tipos se aplica a nível de procedimento. Não se aplica fora de um procedimento em uma classe, estrutura, em um módulo, ou interface. Para obter mais informações sobre a inferência de tipos, consulte Instrução Option Infer e Inferência de tipo local (Visual Basic).
Para obter informações sobre o que acontece quando um tipo de dados ou um inicializador não são especificados, consulte usar como padrão tipos de dados e valores posteriormente em este tópico.
Você pode usar um inicializador de objeto para declarar instâncias de tipos nomeados e anônimos. O código a seguir cria uma instância de uma classe de Student e usa um inicializador de objeto para inicializar propriedades.
Dim student1 As New Student With {.First = "Michael",
.Last = "Tucker"}
Para obter mais informações sobre inicializadores de objeto, consulte Como declarar um objeto usando um inicializador de objeto (Visual Basic), Inicializadores de objeto: tipos nomeados e anônimos (Visual Basic), e Tipos anônimos (Visual Basic).
Declarando mais variáveis
Você pode declarar diversas variáveis em uma instrução de declaração, especificando o nome de variável para cada, e após cada nome de matriz com parênteses. Diversas variáveis são separadas por vírgulas.
Dim lastTime, nextTime, allTimes() As Date
Se você declarar mais de uma variável com uma cláusula de As , você não pode fornecer um inicializador para esse grupo de variáveis.
Você pode especificar tipos de dados diferentes para variáveis diferentes usando uma cláusula separada de As para cada variável declarado. Cada variável tem o tipo de dados especificado na primeira cláusula de As encontrada após sua parte de variablename .
Dim a, b, c As Single, x, y As Double, i As Integer
' a, b, and c are all Single; x and y are both Double
Matrizes
Você pode declarar uma variável para conter uma matriz, que pode conter vários valores. Para especificar que uma variável pode conter uma matriz, siga o variablename imediatamente com parênteses. Para obter mais informações sobre arrays, consulte Matrizes no Visual Basic.
Você pode especificar o menor e o limite superior de cada dimensão da matriz. Para fazer isso, inclua boundslist dentro dos parênteses. Para cada dimensão, boundslist especificar o limite superior e opcionalmente o limite inferior. O limite inferior é sempre zero, se você especifica-lo ou não. cada índice pode variar de zero com seu valor de limite superior.
As duas instruções são equivalentes. Cada declaração declara uma matriz de 21 elementos de Integer . quando você acessa a matriz, o índice pode variar de 0 a 20.
Dim totals(20) As Integer
Dim totals(0 To 20) As Integer
A instrução a seguir declara uma matriz bidimensional do tipo Double. A matriz é 4 linhas (3 + 1) de 6 colunas (5 + 1) cada um. Observe que um limite superior representa o valor mais alto possível para o índice, não o comprimento de dimensão. O comprimento da dimensão é o limite superior mais um.
Dim matrix2(3, 5) As Double
uma matriz pode ter 1 a 32 dimensões.
Você pode deixar qualquer dos limites em branco em uma declaração de matriz. Se você fizer isso, o array tem o número de dimensões que você especificar, mas é não inicializado. Tem um valor de Nothing até que você inicializa pelo menos alguns dos seus elementos. A declaração de Dim deve especificar limites para todas as dimensões ou para as dimensões.
' Declare an array with blank array bounds.
Dim messages() As String
' Initialize the array.
ReDim messages(4)
Se a matriz tiver mais de uma dimensão, você deve incluir vírgulas entre parênteses para indicar o número de dimensões.
Dim oneDimension(), twoDimensions(,), threeDimensions(,,) As Byte
Você pode declarar uma matriz de comprimento zero declarando uma das dimensões da matriz para ser -1. Uma variável que contém um array de comprimento zero não tem o valor Nothing. Matrizes de caracteres de comprimento zero são necessárias por determinadas funções do common language runtime. Se você tentar acessar essa matriz, uma exceção em tempo de execução ocorre. Para obter mais informações, consulte Matrizes no Visual Basic.
Você pode inicializar os valores de matriz usando um literal de matriz. Para fazer isso, coloque os valores de inicialização{}com chaves ().
Dim longArray() As Long = {0, 1, 2, 3}
Para matrizes multidimensionais, a inicialização para cada dimensão separada é incluída nas chaves na dimensão externo. Os elementos são especificados na ordem de linhas principais.
Dim twoDimensions(,) As Integer = {{0, 1, 2}, {10, 11, 12}}
Para obter mais informações sobre literais de matriz, consulte Matrizes no Visual Basic.
usar como padrão tipos de dados e valores
A tabela a seguir descreve os resultados de várias combinações de especificar o tipo de dados e o inicializador em uma instrução de Dim .
tipo de dados especificado? |
inicializador especificado? |
Exemplo |
Resultado |
Não |
Não |
Dim qty |
Se Opção strict é (o padrão), a variável é definido como Nothing. Se Option Strict estiver ativado, um erro em tempo de compilação ocorre. |
Não |
Sim |
Dim qty = 5 |
Se Option infer é on (o padrão), a variável tem o tipo de dados de inicializador. Consulte Inferência de tipo local (Visual Basic). Se Option Infer está e Option Strict está, a variável tem o tipo de dados de Object. Se Option Infer está e Option Strict estiver ativado, um erro em tempo de compilação ocorre. |
Sim |
Não |
Dim qty As Integer |
A variável é inicializado para o valor padrão para o tipo de dados. Consulte a tabela posteriormente em esta seção. |
Sim |
Sim |
Dim qty As Integer = 5 |
Se o tipo de dados de inicializador não é conversível para o tipo de dados especificado, um erro em tempo de compilação ocorre. |
Se você especificar um tipo de dados mas não especifica um inicializador, Visual Basic inicializa a variável o valor padrão para seu tipo de dados. A tabela a seguir mostra os valores padrão de inicialização.
Tipo de dados |
Valor padrão |
todos os tipos numéricos (incluindo Byte e SByte) |
0 |
Char |
binário 0 |
Qualquer referência tipos (incluindo Object, String, e todas as matrizes) |
Nothing |
Boolean |
False |
Date |
12:00 AM de 1º de janeiro do ano 1 (01/01/0001 de 12:00: 00 AM) |
Cada elemento de uma estrutura é inicializado como se fosse uma variável separado. Se você declarar o comprimento de uma matriz mas não inicializa seus elementos, cada elemento é inicializado como se fosse uma variável separado.
Tempo de vida da variável local estática
Um variável local de Static tem um vida útil maior que o do procedimento no qual é declarado. Os limites do tempo de vida da variável depende de onde o procedimento é declarado e se é Shared.
declaração de procedimento |
variável inicializado |
A variável deixa de existir |
em um módulo |
A primeira vez que é feita uma chamada de procedimento |
Quando o programa interromper a execução |
Em uma classe ou estrutura, o procedimento é Shared |
A primeira vez que o procedimento é chamado em uma instância específica ou da classe ou estrutura própria |
Quando o programa interromper a execução |
Em uma classe ou estrutura, o procedimento não é Shared |
A primeira vez que o procedimento é chamado um determinado como métodos de exemplo |
Quando a instância é liberada para coleta de lixo (GC) |
atributos e modificadores
Você pode aplicar atributos somente a variáveis de membro, não a variáveis locais. Um atributo contribui com informações para metadados do assembly, que não é significativo para armazenamento temporário como variáveis locais.
Em o nível de módulo, você não pode usar o modificador de Static para declarar variáveis de membro. Em o nível de procedimento, você não pode usar Shared, Shadows, ReadOnly, WithEvents, ou quaisquer modificadores de acesso para declarar variáveis locais.
Você pode especificar qual código pode acessar uma variável fornecendo accessmodifier. Variáveis de classes e membros de módulo (fora de qualquer procedimento) padrão para acesso privado, e o membro de estrutura variáveis têm acesso público como padrão. Você pode ajustar seus níveis de acesso com os modificadores de acesso. você não pode usar modificadores de acesso em variáveis locais (dentro de um procedimento).
Você pode especificar WithEvents somente em variáveis de membro, não em variáveis locais dentro de um procedimento. Se você especificar WithEvents, o tipo de dados da variável deve ser um tipo de classe específico, não Object. você não pode declarar uma matriz com WithEvents. Para mais informações sobre eventos, veja Eventos (Visual Basic).
Dica
Código fora de uma classe, estrutura, ou o módulo deve qualificar um nome de variável de membro com o nome do, classe, estrutura ou módulo.Código fora de um procedimento ou bloco não pode se referir a quaisquer variáveis locais dentro de esse procedimento ou bloco.
liberando recursos gerenciados
O coletor de lixo .NET Framework descarte de recursos gerenciados sem qualquer codificação extra de sua parte. Entretanto, você pode forçar a disponibilidade de um recurso gerenciado em vez de espera o coletor de lixo.
Se uma classe comporta um recurso e particularmente de escasso (como uma conexão de banco de dados ou um identificador de arquivo), você não pode desejar esperar até a coleta de lixo seguir para limpar uma instância de classe que é mais em uso. Uma classe pode implementar a interface de IDisposable para fornecer uma maneira para liberar recursos antes de uma coleta de lixo. Uma classe que implementa a interface expõe um método de Dispose que pode ser chamado para forçar os recursos importantes serem liberados imediatamente.
A declaração de Using automatiza o processo de adquirir um recurso, de executar um conjunto de instruções, e então descartar do recurso. Em o entanto, o recurso deve implementar a interface de IDisposable . Para obter mais informações, consulte Instrução Using (Visual Basic).
Exemplo
o seguinte exemplo declara variáveis usando a instrução de Dim com várias opções.
' Declare and initialize a Long variable.
Dim startingAmount As Long = 500
' Declare a variable that refers to a Button object,
' create a Button object, and assign the Button object
' to the variable.
Dim switchButton As New System.Windows.Forms.Button
' Declare a local variable that always retains its value,
' even after its procedure returns to the calling code.
Static totalSales As Double
' Declare a variable that refers to an array.
Dim highTemperature(31) As Integer
' Declare and initialize an array variable that
' holds four Boolean check values.
Dim checkValues() As Boolean = {False, False, True, False}
O exemplo a seguir lista os números primos entre 1 e 30. O escopo de variáveis locais é descrito nos comentários de código.
Public Sub ListPrimes()
' The sb variable can be accessed only
' within the ListPrimes procedure.
Dim sb As New System.Text.StringBuilder()
' The number variable can be accessed only
' within the For...Next block. A different
' variable with the same name could be declared
' outside of the For...Next block.
For number As Integer = 1 To 30
If CheckIfPrime(number) = True Then
sb.Append(number.ToString & " ")
End If
Next
Debug.WriteLine(sb.ToString)
' Output: 2 3 5 7 11 13 17 19 23 29
End Sub
Private Function CheckIfPrime(ByVal number As Integer) As Boolean
If number < 2 Then
Return False
Else
' The root and highCheck variables can be accessed
' only within the Else block. Different variables
' with the same names could be declared outside of
' the Else block.
Dim root As Double = Math.Sqrt(number)
Dim highCheck As Integer = Convert.ToInt32(Math.Truncate(root))
' The div variable can be accessed only within
' the For...Next block.
For div As Integer = 2 To highCheck
If number Mod div = 0 Then
Return False
End If
Next
Return True
End If
End Function
Em o exemplo a seguir, a variável de speedValue é declarado no nível de classe. A palavra-chave de Private é usada para declarar a variável. A variável pode ser acessados por qualquer procedimento da classe de Car .
' Create a new instance of a Car.
Dim theCar As New Car()
theCar.Accelerate(30)
theCar.Accelerate(20)
theCar.Accelerate(-5)
Debug.WriteLine(theCar.Speed.ToString)
' Output: 45
Public Class Car
' The speedValue variable can be accessed by
' any procedure in the Car class.
Private speedValue As Integer = 0
Public ReadOnly Property Speed() As Integer
Get
Return speedValue
End Get
End Property
Public Sub Accelerate(ByVal speedIncrease As Integer)
speedValue += speedIncrease
End Sub
End Class
Consulte também
Tarefas
Como declarar um objeto usando um inicializador de objeto (Visual Basic)
Referência
Instrução Const (Visual Basic)
Instrução ReDim (Visual Basic)
Instrução Option Explicit (Visual Basic)
Página de Compilação, Designer de Projeto (Visual Basic)
Conceitos
Declaração de variável no Visual Basic
Inicializadores de objeto: tipos nomeados e anônimos (Visual Basic)
Inicializadores de objeto: tipos nomeados e anônimos (Visual Basic)
Inferência de tipo local (Visual Basic)