Dim — Instrukcja (Visual Basic)
Deklaruje i przydziela miejsce dla jednego lub więcej zmiennych.
[ <attributelist> ] [ accessmodifier ] [[ Shared ] [ Shadows ] | [ Static ]] [ ReadOnly ]
Dim [ WithEvents ] variablelist
Części
Termin |
Definicja |
||||||||||||||||||
attributelist |
Opcjonalne.Zobacz listy atrybutów. |
||||||||||||||||||
accessmodifier |
Opcjonalne.Może być jedną z następujących czynności: Zobacz Poziomy dostępu w Visual Basic. |
||||||||||||||||||
Shared |
Opcjonalne.Zobacz wspólne. |
||||||||||||||||||
Shadows |
Opcjonalne.Zobacz cienie. |
||||||||||||||||||
Static |
Opcjonalne.Zobacz statyczne. |
||||||||||||||||||
ReadOnly |
Opcjonalne.Zobacz tylko do odczytu. |
||||||||||||||||||
WithEvents |
Opcjonalne.Określa, że są to zmienne obiektów, które odwołują się do wystąpienia klasy, które można podnieść zdarzenia.Zobacz WithEvents. |
||||||||||||||||||
variablelist |
Wymagane.Lista zmiennych, które zostały zgłoszone w tej instrukcji. variable [ , variable ... ] Każdy variable ma następującą składnię i części: variablename [ ( [ boundslist ] ) ] [ As [ New ] datatype [ With { [ .propertyname = propinitializer [ , ... ] ] } ] ] [ = initializer ]
|
Uwagi
Kompilator języka Visual Basic używa Dim instrukcję, aby określić typ danych zmiennej i inne informacje, takie jak kod jaki można uzyskać dostęp do zmiennej.W poniższym przykładzie deklaruje zmienną do przechowywania Integer wartość.
Dim numberOfStudents As Integer
Można określić dowolny typ danych lub nazwę wyliczenia, struktury, klasy lub interfejsu.
Dim finished As Boolean
Dim monitorBox As System.Windows.Forms.Form
Dla typu odwołania należy używać New słowo kluczowe, aby utworzyć nową instancję klasy lub struktury, która jest określona przez typ danych.Jeśli korzystasz z New, nie należy używać wyrażenia inicjatora.Zamiast tego podanych argumentów, jeśli są one wymagane do konstruktora klasy, z którego tworzysz zmienną.
Dim bottomLabel As New System.Windows.Forms.Label
Można zadeklarować zmienną w procedurze, blok, klasy, struktury lub moduł.Nie można zadeklarować zmienną w pliku źródłowym, obszar nazw lub interfejsu.Aby uzyskać więcej informacji, zobacz Kontekst deklaracji i domyślne poziomy dostępu (Visual Basic).
Zmienna, która jest zadeklarowana na poziomie modułu, poza jakiejkolwiek procedury jest zmienną lub field.Zmienne składowe są w zasięgu całej ich klasy, struktury lub moduł.Zmienna, która jest zadeklarowana na poziomie procedury jest zmienna lokalna.Zmienne lokalne są w zakresie tylko w ich procedury lub bloku.
Następujących modyfikatorów dostępu są używane do deklarowania zmiennych poza procedurą: Public, Protected, Friend, Protected Friend, i Private.Aby uzyskać więcej informacji, zobacz Poziomy dostępu w Visual Basic.
The Dim keyword is optional and usually omitted if you specify any of the following modifiers: 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
Jeśli Option Explicit jest na (domyślnie), kompilator wymaga deklaracji każdej zmiennej, należy użyć.Aby uzyskać więcej informacji, zobacz Option Explicit — Instrukcja (Visual Basic).
Określenie wartości początkowej
Po utworzeniu można przypisać wartość do zmiennej.Dla typu wartości, użyj Inicjator do dostarczania wyrażenie ma być przypisany do zmiennej.Wyrażenie musi być stała, która może być obliczona w czasie kompilacji.
Dim quantity As Integer = 10
Dim message As String = "Just started"
Jeśli określono inicjatorów i typ danych nie jest określony w As klauzula, wnioskowanie jest używana do rozpoznać typ danych z inicjatora.W poniższym przykładzie zarówno num1 i num2 zdecydowanie są wpisane jako liczby całkowite.W deklaracji z drugiego typu wnioskowanie ustala typ od wartości 3.
' Use explicit typing.
Dim num1 As Integer = 3
' Use local type inference.
Dim num2 = 3
Wnioskowanie stosuje się na poziomie procedury.Nie ma zastosowania poza procedurą w klasy, struktury, moduł lub interfejsu.Aby uzyskać więcej informacji na temat wnioskowanie, zobacz Option Infer — Instrukcja i Wnioskowanie o typie lokalnym (Visual Basic).
Aby dowiedzieć się, co się dzieje, gdy nie jest określony typ danych lub inicjatora, zobacz Dane domyślne typy i wartości później w tym temacie.
Można użyć Inicjator obiektu zadeklarować wystąpienia typów, nazwany i anonimowe.Poniższy kod tworzy instancję Student klasy i używa Inicjator obiektu do zainicjowania właściwości.
Dim student1 As New Student With {.First = "Michael",
.Last = "Tucker"}
Aby uzyskać więcej informacji na temat inicjatory obiektu, zobacz Porady: deklarowanie obiektu za pomocą inicjatora obiektów (Visual Basic), Inicjatory obiektów: typy nazwane i anonimowe (Visual Basic), i Typy anonimowe (Visual Basic).
DEKLARUJĄC wielu zmiennych
Można zadeklarować kilku zmiennych w instrukcji jednej deklaracji, określając nazwę zmiennej dla każdego z nich i po każdej nazwie tablicy nawiasów.Wiele zmiennych są oddzielone przecinkami.
Dim lastTime, nextTime, allTimes() As Date
W przypadku więcej niż jednej zmiennej z jednym As klauzuli, nie może dostarczyć inicjujących dla tej grupy zmiennych.
Można określić różne typy danych dla różnych zmiennych za pomocą oddzielnie w As klauzula dla każdej zmiennej, należy zadeklarować.Każda zmienna ma typ danych określony w pierwszym As klauzula napotkał po jego variablename część.
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
Tablice
Można zadeklarować zmienną do przechowywania Tablica, który może przechowywać wiele wartości.Aby określić, że zmienna posiada tablicę, postępuj zgodnie z jego variablename bezpośrednio z nawiasami.Aby uzyskać więcej informacji dotyczących tablic, zobacz Tablice w Visual Basic.
Można określić dolną i górną granicę każdego wymiaru tablicy.Aby to zrobić, należy dołączyć boundslist wewnątrz nawiasów.Dla każdego wymiaru boundslist Określa górny i opcjonalnie dolne.Dolna granica jest zawsze zero, czy możesz określić czy nie.Każdy indeks może się różnić od zera, poprzez jej wartość górnej granicy.
Dwie poniższe instrukcje są równoważne.Każda instrukcja deklaruje tablicy 21 Integer elementy.Gdy dostęp do tablicy, indeks mogą różnić się od 0 do 20.
Dim totals(20) As Integer
Dim totals(0 To 20) As Integer
Poniższa instrukcja deklaruje dwuwymiarowej tablicy typu Double.Tablica ma 4 wiersze (3 + 1) 6 kolumnach (5 + 1) każdego.Należy zauważyć, że górny reprezentuje najwyższą możliwa wartość indeksu, a nie długości wymiaru.Długość wymiar jest górną granicą plus jeden.
Dim matrix2(3, 5) As Double
Tablica może mieć od 1 do 32 wymiarów.
Wszystkie granice można pozostawić puste deklaracji tablicy.Jeśli to zrobisz, tablica ma wymiary, które określisz, ale jest niezainicjowany.Ma wartość Nothing do momentu zainicjowania w co najmniej niektórych elementów.Dim Instrukcja należy określić granice dla wszystkich wymiarów lub dla nie wymiarów.
' Declare an array with blank array bounds.
Dim messages() As String
' Initialize the array.
ReDim messages(4)
Jeśli tablica zawiera więcej niż jeden wymiar, musi zawierać przecinków w nawiasach, aby wskazać liczbę wymiarów.
Dim oneDimension(), twoDimensions(,), threeDimensions(,,) As Byte
Można zadeklarować o zerowej długości tablicy oświadczając wymiary tablicy być -1.Zmienna, która posiada tablicę o zerowej długości nie ma wartość Nothing.Tablice o zerowej długości są wymagane przez niektóre typowe funkcje środowiska wykonawczego języka.Podczas próby dostępu do takiej tablicy, wystąpi wyjątek wykonania.Aby uzyskać więcej informacji, zobacz Tablice w Visual Basic.
Za pomocą literału tablicowego, można zainicjować wartości z tablicy.Aby to zrobić, otaczające wartości inicjowania z nawiasami klamrowymi ({}).
Dim longArray() As Long = {0, 1, 2, 3}
Dla tablic wielowymiarowych inicjowania dla każdego odrębnego wymiaru jest ujęte w nawiasy klamrowe w wymiarze zewnętrznym.Elementy są określone w kolejności wierszy głównych.
Dim twoDimensions(,) As Integer = {{0, 1, 2}, {10, 11, 12}}
Aby uzyskać więcej informacji na temat literały tablicowe, zobacz Tablice w Visual Basic.
Dane domyślne typy i wartości
W poniższej tabeli opisano wyniki różnych kombinacji określający typ danych i inicjator w Dim instrukcji.
Określony typ danych? |
Inicjator określony? |
Przykład |
Wynik |
Nr |
Nr |
Dim qty |
Jeśli Opcji ścisłego jest wyłączone (domyślnie), zmienna jest ustawiona na Nothing. Jeśli Option Strict jest włączone, wystąpi błąd kompilacji. |
Nr |
Tak |
Dim qty = 5 |
Jeśli Wywnioskować opcja jest na (domyślnie), zmienna ma dane typu inicjatora.Zobacz Wnioskowanie o typie lokalnym (Visual Basic). Jeśli Option Infer jest wyłączona i Option Strict jest wyłączony, zmienna ma typ danych Object. Jeśli Option Infer jest wyłączona i Option Strict jest włączone, wystąpi błąd kompilacji. |
Tak |
Nr |
Dim qty As Integer |
Zmienna jest ustawiana na wartość domyślną dla typu danych.Zobacz tabelę w dalszej części tej sekcji. |
Tak |
Tak |
Dim qty As Integer = 5 |
Jeśli typ danych inicjujących nie jest konwertowany na określony typ danych, występuje błąd kompilacji. |
Jeśli możesz określić typ danych, ale nie określono inicjatorów, Visual Basic inicjuje zmienną na wartość domyślną dla jego typu danych.W poniższej tabeli przedstawiono domyślne wartości inicjowania.
Typ danych |
Wartość domyślna |
Wszystkie typy liczbowe (łącznie z Byte i SByte) |
0 |
Char |
Binarne 0 |
Odwołać wszystkie typy (łącznie z Object, Stringi wszystkie tablice) |
Nothing |
Boolean |
False |
Date |
12: 00 AM od 1 stycznia roku, 1 (0001-01/01 12: 00: 00 AM) |
Każdy element struktury jest inicjowany, tak jakby oddzielna zmienna.Jeśli zadeklarować długość tablicy, ale nie zainicjować jego elementy, każdy element jest inicjowany, tak jakby oddzielna zmienna.
Lokalnej zmiennej statycznej
A Static zmienna lokalna ma długą żywotność niż procedura, w której jest zadeklarowana.Granice życia zmiennej zależy gdzie jest zadeklarowany jako procedura i czy Shared.
Procedura zgłoszenia |
Zmienna została zainicjowana |
Zmienna zatrzymuje istniejących |
W module |
Procedura jest wywoływana po raz pierwszy |
Kiedy program zatrzymuje wykonywanie |
W klasie lub strukturze procedura jestShared |
Przy pierwszym wywołaniu procedury na konkretne wystąpienie albo na klasy lub struktury, sam |
Kiedy program zatrzymuje wykonywanie |
W klasie lub strukturze nie jest procedurąShared |
Przy pierwszym wywołaniu procedury na konkretne wystąpienie |
Kiedy wystąpienie jest dopuszczone do wyrzucania elementów bezużytecznych (GC) |
Atrybuty i modyfikatorów
Atrybuty można zastosować tylko do zmiennych, a nie do zmiennych lokalnych.Atrybut przyczynia się informacje z zestawu metadanych, który nie ma sensu do tymczasowego przechowywania danych takich jak zmienne lokalne.
Na poziomie modułu, nie można użyć Static modyfikator do deklaracji Członkowskich zmiennych.Na poziomie procedury, nie można użyć Shared, Shadows, ReadOnly, WithEvents, lub dostępu do żadnych modyfikatorów do deklarowania zmiennych lokalnych.
Można określić, jaki kod można uzyskać dostęp do zmiennej, podając accessmodifier.Klasy i moduł domyślne zmienne (poza jakąkolwiek procedurą) Członkowskie prywatny dostęp do i domyślnie zmienne Członkowskie struktury publicznego dostępu.Można dostosować ich poziomy dostępu za pomocą modyfikatorów dostępu.Nie można używać modyfikatorów dostępu do zmiennych lokalnych (wewnątrz procedury).
Można określić WithEvents tylko na zmienne składowe, a nie na zmiennych lokalnych wewnątrz procedury.Jeśli określisz WithEvents, typ danych zmiennej musi być typu określonej klasy, nie Object.Nie można zadeklarować tablicę z WithEvents.Aby uzyskać więcej informacji dotyczących zdarzeń, zobacz Zdarzenia (Visual Basic).
[!UWAGA]
Kod poza klasą, strukturą lub moduł musi kwalifikować się nazwa zmienna członka z nazwą tej klasy, struktury lub moduł.Kod poza procedurą lub blok nie może odwoływać się do zmiennych lokalnych w ramach tej procedury lub bloku.
Zwalnianie zasobów zarządzanych
.NET Framework garbage collector zbywa zarządzanych zasobów bez żadnych dodatkowych kodowania z Twojej strony.Można jednak wymusić usuwania zarządzanego zasobu zamiast czekać na garbage collector.
Jeśli klasa posiada na szczególnie cenne i ograniczonych zasób (na przykład uchwyt pliku lub połączenia bazy danych), nie chcesz czekać, aż do następnego bezużytecznych oczyścić wystąpienie klasy, która nie jest już w użyciu.Klasa może realizować IDisposable interfejsu w sposób, aby zwolnić zasoby przed kolekcji garbage.Opisuje klasę, która implementuje interfejs Dispose metodę, która może być wywoływana wymusić cenne zasoby, aby natychmiast zwolnione.
Using Instrukcja automatyzuje proces pozyskiwania zasobu, wykonywanie zestaw instrukcji, i następnie usuwania zasobu.Jednakże, zasób musi implementować IDisposable interfejsu.Aby uzyskać więcej informacji, zobacz Using — Instrukcja (Visual Basic).
Przykład
W poniższym przykładzie deklaruje zmienne za pomocą Dim instrukcji z różnych opcji.
' 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}
Poniższy przykład wyświetla liczby od 1 do 30.Zakres zmiennych lokalnych jest opisany w komentarzach do kodu.
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
W poniższym przykładzie speedValue zmienna jest zadeklarowana na poziomie klasy.Private Jest użyć słowa kluczowego, aby zadeklarować zmienną.Zmienna jest możliwy przez dowolną procedurę w Car klasy.
' 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
Zobacz też
Zadania
Porady: deklarowanie obiektu za pomocą inicjatora obiektów (Visual Basic)
Informacje
Const — Instrukcja (Visual Basic)
ReDim — Instrukcja (Visual Basic)
Option Explicit — Instrukcja (Visual Basic)
Strona kompilowania, Projektant projektu (Visual Basic)
Koncepcje
Deklaracja zmiennej w Visual Basic
Inicjatory obiektów: typy nazwane i anonimowe (Visual Basic)
Inicjatory obiektów: typy nazwane i anonimowe (Visual Basic)
Wnioskowanie o typie lokalnym (Visual Basic)