Instrução Dim (Visual Basic)
Declares and allocates storage space for one or more variables.
[ <attributelist> ] [ accessmodifier ] [[ Shared ] [ Shadows ] | [ Static ]] [ ReadOnly ]
Dim [ WithEvents ] variablelist
Parts
Term |
Definition |
attributelist |
Optional. See Attribute List. |
accessmodifier |
Optional. Can be one of the following: |
Shared |
Optional. See Shared. |
Shadows |
Optional. See Shadows. |
Static |
Optional. Consulte estático. |
ReadOnly |
Optional. Consulte ReadOnly. |
WithEvents |
Optional. Specifies that these are object variables that refer to instances of a class that can raise events. Consulte WithEvents. |
variablelist |
Required. List of variables being declared in this statement. variable [ , variable ... ] Each variable has the following syntax and parts: variablename [ ( [ boundslist ] ) ] [ As [ New ] datatype [ With { [ .propertyname = propinitializer [ , ... ] ] } ] ] [ = initializer ]
PartDescription
variablename Required.Name of the variable.See Nomes de elementos declarados (Visual Basic).
boundslist Optional.List of bounds of each dimension of an array variable.
New Optional.Cria uma nova instância da classe quando o Dimexecuta ademonstrativo .
datatype Optional.Tipo de dados da variável.
With Optional.Apresenta a lista de inicializador de objeto .
propertyname Optional.O nome de uma propriedade na classe que você está fazendo uma instância do.
propinitializer Necessário após propertyname =.A expressão é avaliada e atribuída ao nome da propriedade .
initializer Opcional se New não for especificado.Expression that is evaluated and assigned to the variable when it is created.
|
Comentários
O compilador Visual Basic usa o Dimdedemonstrativo para determinar a variáveldo tipo de dados e outras informações, como, por exemplo, qual código pode acessar a variável. O exemplo a seguir declara uma variável para um Integer valor.
Dim numberOfStudents As Integer
You can specify any data type or the name of an enumeration, structure, class, or interface.
Dim finished As Boolean
Dim monitorBox As System.Windows.Forms.Form
Para um tipo de referência, você usar o Newapalavra-chave para criar uma nova instância da classe ou estrutura , o que é especificado pelo tipo de dados. Se você usar New, você não usar uma expressão de inicializador. Em vez disso, você fornecer argumentos, caso sejam necessários para o construtor da classe da qual você está criando a variável.
Dim bottomLabel As New System.Windows.Forms.Label
Você pode declarar uma variável em um procedimento, bloco, classe, estruturaou módulo. Você não pode declarar uma variável em um arquivo de fonte , o namespaceou interface. For more information, see Contextos de declaração e níveis de acesso padrão (Visual Basic).
Uma variável é declarada no nível de módulo , fora de qualquer procedimento, é um variávelde membro ou campo. Member variables are in scope throughout their class, structure, or module. Uma variável é declarada no nível de procedimento é uma variávelde local. Variáveis locais estão no escopo somente dentro de seu procedimento ou bloco.
Os modificadores de acesso a seguir são usados para declarar variáveis fora de um procedimento: Public, Protected, Friend, Protected Friend, and Private. For more information, see Níveis de acesso em Visual Basic.
O Dim palavra-chave é opcional e geralmente omitidos se você especificar qualquer um dos seguintes modificadores: Public, Protected, Friend, Protected Friend, Private, Shared, Shadows, Static, ReadOnly, or WithEvents.
Public maximumAllowed As Double
Protected Friend currentUserName As String
Private salary As Decimal
Static runningTotal As Integer
Se Option Explicit é On (padrão), o compilador requer uma declaração para cada variável você utiliza. For more information, see Instrução Option Explicit (Visual Basic).
Especificando um Valorde inicial
Você pode atribuir um valor a uma variável quando ele é criado. Para um tipo de valor, que você usar um inicializador para fornecer uma expressão a ser atribuído à variável. The expression must evaluate to a constant that can be calculated at compile time.
Dim quantity As Integer = 10
Dim message As String = "Just started"
Se um inicializador for especificado e não for especificado um tipo de dados em um As cláusula, inferênciade tipo é usado para inferir o tipo de dados do inicializador. No exemplo a seguir, ambos num1 e num2 são fortemente tipadas como números inteiros. Na segunda declaração, a inferência de tipo infere o tipo do valor 3.
' Use explicit typing.
Dim num1 As Integer = 3
' Use local type inference.
Dim num2 = 3
Para obter informações sobre a inferênciade tipo, consulte Inferência de tipo de variável local (Visual Basic). Para obter informações sobre o que acontece quando um tipo de dados ou inicializador não for especificado, consulte Default Data Types and Values posteriormente neste tópico.
Você pode usar um o inicializador deobjeto para declarar as instâncias de tipos anônimos e nomeados. O código a seguir cria uma instância de um deStudentclasse e usa um inicializador de objeto para inicializar as propriedades.
Dim student1 As New Student With {.First = "Michael",
.Last = "Tucker"}
Para obter mais informações sobre os 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).
Declarar diversas variáveis
Você pode declarar diversas variáveis em uma declaração demonstrativo, que especifica o nome de variável para cada um deles e, após cada nome de matriz com parênteses. Multiple variables are separated by commas.
Dim lastTime, nextTime, allTimes() As Date
Se você declarar mais de uma variável com um As cláusula, não é possível fornecer um inicializador para esse grupo de variáveis.
Você pode especificar diferentes tipos de dados de variáveis diferentes usando um separado As cláusula para cada variável que você declarar. Cada variável leva o tipo de dados especificado no primeiro As cláusula encontrados após o seu variablename part.
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
Arrays
Você pode declarar uma variável para um matriz, que pode conter vários valores. Para especificar que uma variável contém uma matriz, siga sua variablename imediatamente com parênteses. Para obter mais informações sobre matrizes, consulte Matrizes no Visual Basic.
Você pode especificar a inferior e superior limite de cada dimensão de uma matriz. Para fazer isso, inclua uma boundslist dentro de parênteses. Para cada dimensão, a boundslist Especifica superior limite e opcionalmente inferior limite. The lower bound is always zero, whether you specify it or not. Each index can vary from zero through its upper bound value.
As duas instruções a seguintes são equivalentes. Cada demonstrativo declara uma matriz de 21 Integer elementos. When you access the array, the index can vary from 0 through 20.
Dim totals(20) As Integer
Dim totals(0 To 20) As Integer
A demonstrativo a seguir declara uma matriz dimensional de-duas do tipo Double. O array tem 4 linhas (3 + 1) de 6 colunas (5 + 1) cada. Observe que um superior limite representa o maior valor possível para o índice, não o comprimento da dimensão. O comprimento da dimensão é superior limite mais um.
Dim matrix2(3, 5) As Double
Uma matriz pode ter de 1 a 32 dimensões.
Você pode deixar todos os limites em branco em uma declaraçãode matriz. Se você fizer isso, a matriz tem o número de dimensões que você especificar, mas não foi inicializado. Ele tem um valor de Nothing até que você inicializar pelo menos alguns dos elementos. O Dim demonstrativo deve especificar limites para todas as dimensões ou para nenhuma dimensão.
' Declare an array with blank array bounds.
Dim messages() As String
' Initialize the array.
ReDim messages(4)
If the array has more than one dimension, you must include commas between the parentheses to indicate the number of dimensions.
Dim oneDimension(), twoDimensions(,), threeDimensions(,,) As Byte
Você pode declarar um matriz de comprimento zero- , declarando uma das dimensões da matriz como -1. Uma variável que contém uma matriz de comprimento de zero de-não tem o valor Nothing. Matrizes de comprimento zero-são necessárias determinadas funções Common Language Runtime . Se você tentar acessar essa matriz, ocorre umaexceção de tempo de execução. For more information, see Matrizes no Visual Basic.
Você pode inicializar os valores de uma 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 está entre chaves na dimensão externa. The elements are specified in row-major order.
Dim twoDimensions(,) As Integer = {{0, 1, 2}, {10, 11, 12}}
Para obter mais informações sobre os literais de matriz, consulte Matrizes no Visual Basic.
Padrão Valores e tipos de dados
A tabela a seguir descreve os resultados de várias combinações de especificar o tipo de dados e o inicializador de um Dim demonstrativo.
Tipo de dados especificado? |
Inicializador especificado? |
Example |
Result |
No |
No |
Dim qty |
Se Option Strict é Off (padrão), a variável é definida como Nothing. Se Option Strict é On, uma compilar- erro de tempo ocorre. |
No |
Yes |
Dim qty = 5 |
Se Option Infer é On (padrão), a variável leva o tipo de dados do inicializador. See Inferência de tipo de variável local (Visual Basic). Se Option Infer é Off e Option Strict é Off, a variável leva o tipo de dados de Object. Se Option Infer é Off e Option Strict é On, uma compilar- erro de tempo ocorre. |
Yes |
No |
Dim qty As Integer |
A variável é inicializada com o valor padrão para o tipo de dados. Consulte a tabela mais adiante nesta seção. |
Yes |
Yes |
Dim qty As Integer = 5 |
Se o tipo de dados do inicializador não é especificado tipo de dados, uma compilarconversíveis- erro de tempo ocorre. |
Se você especificar um tipo de dados , mas não especificar um inicializador Visual Basic inicializa a variável para o valor padrão para o seu tipo de dados. The following table shows the default initialization values.
Data type |
Default value |
Tudo tipos numéricos (incluindo Byte e SByte) |
0 |
Char |
Binário 0 |
Tudo tipos de referência (incluindo Object, Stringe todos os arrays) |
Nothing |
Boolean |
False |
Date |
12:00 AM of January 1 of the year 1 (01/01/0001 12:00:00 AM) |
Cada elemento de uma estrutura é inicializado como se fosse uma variávelde separada. If you declare the length of an array but do not initialize its elements, each element is initialized as if it were a separate variable.
Vida útil variável Local estática
A Static a variável local tem uma tempo de vida de mais do que o procedimento no qual é declarada. Os limites da variávelde tempo de vida dependem de onde o procedimento é declarado e se é Shared.
Procedure declaration |
Variable initialized |
Pára de variável existente |
Em um módulo |
The first time the procedure is called |
Quando o seu programa interrompe a execução |
Em um deSharedclasse ou estrutura |
The first time the procedure is called either on a specific instance or on the class or structure itself |
Quando o seu programa interrompe a execução |
Em uma classe ou estrutura que não sejaShared |
The first time the procedure is called on a specific instance |
When the instance is released for garbage collection (GC) |
Atributos e modificadores
Você pode aplicar atributos de somente variáveis de membro, não para variáveis locais. An attribute contributes information to the assembly's metadata, which is not meaningful for temporary storage such as local variables.
No nível de módulo , você não pode usar o Static modificador para declarar variáveis de membro. No nível de procedimento , você não pode usar Shared, Shadows, ReadOnly, WithEvents, ou qualquer acesso modificadores para declarar variáveis de local.
Você pode especificar qual código pode acessar uma variável , fornecendo um accessmodifier. Class and module member variables (outside any procedure) default to private access, and structure member variables default to public access. You can adjust their access levels with the access modifiers. Você não pode usar modificadores de acesso a 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 não deve ser um tipo específico de classe , Object. Você não pode declarar uma matriz com WithEvents. For more information about events, see Eventos (Visual Basic).
Observação |
---|
OCódigo fora de uma classe, estruturaou módulo deve qualificar o nome de um membro variávelcom o nome dessa classe, estruturaou módulo. Code outside a procedure or block cannot refer to any local variables within that procedure or block. |
Exemplo
O exemplo a seguir declara variáveis usando o Dimdedemonstrativo 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 é descrita nos comentários do 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
No exemplo a seguir, o despeedValuevariável é declarada no nível de classe . O Private palavra-chave é usada para declarar a variável. A variável pode ser acessado por qualquer procedimento na Car classe.
' 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 uma instância de um tipo anônimo (Visual Basic)
Como: declarar um objeto usando um inicializador de objeto (Visual Basic)
Referência
Declaração Const (Visual Basic)
instrução ReDim (Visual Basic)
Instrução Option Explicit (Visual Basic)
Compilar a página, 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 de variável local (Visual Basic)
Histórico de alterações
Date |
History |
Motivo |
Janeiro de 2011 |
Reorganizado os comentários adicionados exemplos e feito outras mudanças. |
Aprimoramento de informações. |