Compartilhar via


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:

Veja Níveis de acesso no Visual Basic.

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 ]

Parte

Descrição

variablename

Obrigatório. Nome da variável. Consulte Nomes de elemento declarados (Visual Basic).

boundslist

Opcional. Lista dos limites de cada dimensão de uma variável de matriz.

New

Opcional. Cria uma nova instância da classe quando a declaração de Dim executa.

datatype

Opcional. Tipo de dados da variável.

With

Opcional. Apresenta a lista de inicializador de objeto.

propertyname

Opcional. O nome de uma propriedade na classe você estiver fazendo uma instância de.

propinitializer

Necessário após propertyname =. A expressão que é avaliada e atribuída ao nome da propriedade.

initializer

Opcional New se não for especificado. Expressão que é avaliada e atribuída à variável quando é criada.

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)

Instrução Option Infer

Instrução Option Strict

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)

Tipos anônimos (Visual Basic)

Inicializadores de objeto: tipos nomeados e anônimos (Visual Basic)

Inferência de tipo local (Visual Basic)

Outros recursos

Matrizes no Visual Basic