Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Deklaruje i przydziela miejsce do magazynowania dla co najmniej jednej zmiennej.
Składnia
[ <attributelist> ] [ accessmodifier ] [[ Shared ] [ Shadows ] | [ Static ]] [ ReadOnly ]
Dim [ WithEvents ] variablelist
Części
attributelistOpcjonalny. Zobacz Lista atrybutów.
accessmodifierOpcjonalny. Może być jednym z następujących elementów:
Zobacz Poziomy dostępu w Visual Basic.
SharedOpcjonalny. Zobacz Udostępnione.
ShadowsOpcjonalny. Zobacz Cienie.
StaticOpcjonalny. Zobacz Statyczne.
ReadOnlyOpcjonalny. Zobacz ReadOnly.
WithEventsOpcjonalny. Określa, że są to zmienne obiektu odwołujące się do wystąpień klasy, która może zgłaszać zdarzenia. Zobacz WithEvents.
variablelistTo jest wymagane. Lista zmiennych zadeklarowanych w tej instrukcji.
variable [ , variable ... ]Każda z nich
variablema następującą składnię i części:variablename [ ( [ boundslist ] ) ] [ As [ New ] datatype [ With{[ .propertyname = propinitializer [ , ... ] ] } ] ] [ = initializer ]Część Opis variablenameTo jest wymagane. Nazwa zmiennej. Zobacz Nazwy zadeklarowanych elementów. boundslistOpcjonalny. Lista granic każdego wymiaru zmiennej tablicowej. NewOpcjonalny. Tworzy nowe wystąpienie klasy po uruchomieniu instrukcji Dim.datatypeOpcjonalny. Typ danych zmiennej. WithOpcjonalny. Wprowadza listę inicjatora obiektów. propertynameOpcjonalny. Nazwa właściwości w klasie, której wystąpienie jest tworzone. propinitializerWymagane po propertyname=. Wyrażenie, które jest oceniane i przypisane do nazwy właściwości.initializerOpcjonalnie, jeśli Newnie zostanie określony. Wyrażenie, które jest oceniane i przypisywane do zmiennej podczas jej tworzenia.
Uwagi
Kompilator języka Visual Basic używa Dim instrukcji , aby określić typ danych zmiennej i inne informacje, takie jak kod, który może uzyskać dostęp do zmiennej. Poniższy przykład deklaruje zmienną Integer do przechowywania wartości.
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
Jako typ odwołania należy użyć New słowa kluczowego , aby utworzyć nowe wystąpienie klasy lub struktury określonej przez typ danych. Jeśli używasz metody New, nie używasz wyrażenia inicjatora. Zamiast tego należy podać argumenty, jeśli są one wymagane, do konstruktora klasy, z której tworzysz zmienną.
Dim bottomLabel As New System.Windows.Forms.Label
Zmienną można zadeklarować w procedurze, bloku, klasie, strukturze lub module. Nie można zadeklarować zmiennej w pliku źródłowym, przestrzeni nazw lub interfejsie. Aby uzyskać więcej informacji, zobacz Konteksty deklaracji i Domyślne poziomy dostępu.
Zmienna zadeklarowana na poziomie modułu poza dowolną procedurą jest zmienną składową lub polem. Zmienne składowe są w zakresie w całej klasie, strukturze lub module. Zmienna zadeklarowana na poziomie procedury jest zmienną lokalną. Zmienne lokalne znajdują się w zakresie tylko w ramach ich procedury lub bloku.
Następujące modyfikatory dostępu są używane do deklarowania zmiennych poza procedurą: Public, , ProtectedFriend, Protected Friend, i Private. Aby uzyskać więcej informacji, zobacz Poziomy dostępu w Visual Basic.
Słowo Dim kluczowe jest opcjonalne i zwykle pomijane, jeśli określisz dowolny z następujących modyfikatorów: Public, FriendSharedProtected FriendProtectedShadowsStaticPrivateReadOnlylub .WithEvents
Public maximumAllowed As Double
Protected Friend currentUserName As String
Private salary As Decimal
Static runningTotal As Integer
Jeśli Option Explicit jest włączona (wartość domyślna), kompilator wymaga deklaracji dla każdej używanej zmiennej. Aby uzyskać więcej informacji, zobacz Opcja jawna instrukcja.
Określanie wartości początkowej
Wartość można przypisać do zmiennej podczas jej tworzenia. W przypadku typu wartości należy użyć inicjatora , aby podać wyrażenie, które ma zostać przypisane do zmiennej. Wyrażenie musi zostać obliczone na stałą, którą można obliczyć w czasie kompilacji.
Dim quantity As Integer = 10
Dim message As String = "Just started"
Jeśli określono inicjator i typ danych nie jest określony w klauzuli As , wnioskowanie typu służy do wnioskowania typu typu z inicjatora. W poniższym przykładzie zarówno num1 jak i num2 są silnie typizowane jako liczby całkowite. W drugiej deklaracji typ wnioskowania wywnioskuje typ z wartości 3.
' Use explicit typing.
Dim num1 As Integer = 3
' Use local type inference.
Dim num2 = 3
Wnioskowanie typu ma zastosowanie na poziomie procedury. Nie ma zastosowania poza procedurą w klasie, strukturze, module lub interfejsie. Aby uzyskać więcej informacji na temat wnioskowania typów, zobacz Instrukcje wnioskowania opcji i Wnioskowanie typu lokalnego.
Aby uzyskać informacje o tym, co się stanie, gdy typ danych lub inicjator nie zostanie określony, zobacz Domyślne typy danych i wartości w dalszej części tego tematu.
Za pomocą inicjatora obiektów można zadeklarować wystąpienia nazwanych i anonimowych typów. Poniższy kod tworzy wystąpienie Student klasy i używa inicjatora obiektu do inicjowania właściwości.
Dim student1 As New Student With {.First = "Michael",
.Last = "Tucker"}
Aby uzyskać więcej informacji na temat inicjatorów obiektów, zobacz Instrukcje: deklarowanie obiektu za pomocą inicjatora obiektów, inicjatory obiektów: typy nazwane i anonimowe oraz typy anonimowe.
Deklarowanie wielu zmiennych
Można zadeklarować kilka zmiennych w jednej instrukcji deklaracji, określając nazwę zmiennej dla każdego z nich i postępując zgodnie z każdą nazwą tablicy nawiasami. Wiele zmiennych jest rozdzielonych przecinkami.
Dim lastTime, nextTime, allTimes() As Date
Jeśli zadeklarowasz więcej niż jedną zmienną z jedną As klauzulą, nie można podać inicjatora dla tej grupy zmiennych.
Dla różnych zmiennych można określić różne typy danych, używając oddzielnej As klauzuli dla każdej zadeklarowanej zmiennej. Każda zmienna przyjmuje typ danych określony w pierwszej As klauzuli napotkanej po jej variablename części.
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 tablicy, która może przechowywać wiele wartości. Aby określić, że zmienna zawiera tablicę, postępuj zgodnie z nawiasami variablename . Aby uzyskać więcej informacji na temat tablic, zobacz Tablice.
Można określić dolną i górną granicę każdego wymiaru tablicy. W tym celu uwzględnij wewnątrz boundslist nawiasów. Dla każdego wymiaru boundslist określa górną granicę i opcjonalnie dolną granicę. Dolna granica jest zawsze równa zero, bez względu na to, czy jest określona. Każdy indeks może się różnić od zera przez jego górną granicę.
Następujące dwie instrukcje są równoważne. Każda instrukcja deklaruje tablicę 21 Integer elementów. Gdy uzyskujesz dostęp do tablicy, indeks może się różnić od 0 do 20.
Dim totals(20) As Integer
Dim totals(0 To 20) As Integer
Poniższa instrukcja deklaruje dwuwymiarową tablicę typu Double. Tablica zawiera 4 wiersze (3 + 1) z 6 kolumn (5 + 1) każdy. Należy pamiętać, że górna granica reprezentuje najwyższą możliwą wartość indeksu, a nie długość wymiaru. Długość wymiaru jest górną granicą i jedną.
Dim matrix2(3, 5) As Double
Tablica może mieć wymiary od 1 do 32.
Wszystkie granice można pozostawić puste w deklaracji tablicy. Jeśli to zrobisz, tablica ma liczbę podanych wymiarów, ale jest niezainicjowana. Ma wartość , Nothing dopóki nie zainicjujesz co najmniej niektórych jej elementów. Instrukcja Dim musi określać granice dla wszystkich wymiarów lub bez wymiarów.
' Declare an array with blank array bounds.
Dim messages() As String
' Initialize the array.
ReDim messages(4)
Jeśli tablica ma więcej niż jeden wymiar, należy uwzględnić przecinki między nawiasami, aby wskazać liczbę wymiarów.
Dim oneDimension(), twoDimensions(,), threeDimensions(,,) As Byte
Tablicę o zerowej długości można zadeklarować, deklarując jeden z wymiarów tablicy o wartości -1. Zmienna, która zawiera tablicę o zerowej długości, nie ma wartości Nothing. Tablice o zerowej długości są wymagane przez niektóre funkcje środowiska uruchomieniowego języka wspólnego. Jeśli spróbujesz uzyskać dostęp do takiej tablicy, wystąpi wyjątek środowiska uruchomieniowego. Aby uzyskać więcej informacji, zobacz Tablice.
Wartości tablicy można zainicjować przy użyciu literału tablicy. W tym celu należy otoczyć wartości inicjowania nawiasami klamrowymi ({}).
Dim longArray() As Long = {0, 1, 2, 3}
W przypadku tablic wielowymiarowych inicjowanie dla każdego oddzielnego wymiaru jest ujęte w nawiasy klamrowe w wymiarze zewnętrznym. Elementy są określone w kolejności głównej wiersza.
Dim twoDimensions(,) As Integer = {{0, 1, 2}, {10, 11, 12}}
Aby uzyskać więcej informacji na temat literałów tablicy, zobacz Tablice.
Domyślne typy danych i wartości
W poniższej tabeli opisano wyniki różnych kombinacji określania typu danych i inicjatora w instrukcji Dim .
| Określony typ danych? | Określony inicjator? | Przykład | Wynik |
|---|---|---|---|
| Nie. | Nie. | Dim qty |
Jeśli opcja Strict jest wyłączona (wartość domyślna), zmienna jest ustawiona na Nothing.W przypadku Option Strict włączenia wystąpi błąd czasu kompilacji. |
| Nie. | Tak | Dim qty = 5 |
Jeśli wywniosek opcji jest włączony (wartość domyślna), zmienna przyjmuje typ danych inicjatora. Zobacz Wnioskowanie typu lokalnego. Jeśli Option Infer wartość jest wyłączona i Option Strict wyłączona, zmienna pobiera typ Objectdanych .Jeśli Option Infer jest wyłączona i Option Strict jest włączona, wystąpi błąd czasu kompilacji. |
| Tak | Nie. | Dim qty As Integer |
Zmienna jest inicjowana do wartości domyślnej dla typu danych. Zapoznaj się z tabelą w dalszej części tej sekcji. |
| Tak | Tak | Dim qty As Integer = 5 |
Jeśli typ danych inicjatora nie jest konwertowany na określony typ danych, wystąpi błąd czasu kompilacji. |
Jeśli określisz typ danych, ale nie określisz inicjatora, program 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 (w tym Byte i SByte) |
0 |
Char |
Binarne 0 |
Wszystkie typy odwołań (w tym Object, Stringi wszystkie tablice) |
Nothing |
Boolean |
False |
Date |
12:00 od 1 stycznia roku 1 (01.01.001.001 12:00:00 am) |
Każdy element struktury jest inicjowany tak, jakby był oddzielną zmienną. Jeśli deklarujesz długość tablicy, ale nie inicjujesz jej elementów, każdy element jest inicjowany tak, jakby był to oddzielna zmienna.
Statyczny okres istnienia zmiennej lokalnej
Zmienna lokalna Static ma dłuższy okres istnienia niż procedura, w której jest zadeklarowana. Granice okresu istnienia zmiennej zależą od tego, gdzie jest zadeklarowana procedura i czy jest to Shared.
| Deklaracja procedury | Zainicjowana zmienna | Zmienna zatrzymuje istniejące |
|---|---|---|
| W module | Przy pierwszym wywołaniu procedury | Po zatrzymaniu wykonywania programu |
W klasie lub strukturze procedura jest Shared |
Przy pierwszym wywołaniu procedury w konkretnym wystąpieniu lub w samej klasie lub samej strukturze | Po zatrzymaniu wykonywania programu |
W klasie lub strukturze procedura nie jest Shared |
Przy pierwszym wywołaniu procedury w konkretnym wystąpieniu | Po przekazaniu wystąpienia do zbierania śmieci (GC) |
Atrybuty i modyfikatory
Atrybuty można stosować tylko do zmiennych członkowskich, a nie do zmiennych lokalnych. Atrybut współtworzy informacje o metadanych zestawu, które nie są istotne dla magazynu tymczasowego, takiego jak zmienne lokalne.
Na poziomie modułu Static nie można użyć modyfikatora do deklarowania zmiennych członkowskich. Na poziomie procedury nie można użyć Sharedmodyfikatorów dostępu , Shadows, ReadOnlyWithEventslub żadnych modyfikatorów dostępu do deklarowania zmiennych lokalnych.
Możesz określić, jaki kod może uzyskać dostęp do zmiennej, podając accessmodifierelement . Zmienne składowe klasy i modułu (poza dowolną procedurą) są domyślne dla dostępu prywatnego i zmienne składowe struktury domyślne dla dostępu publicznego. Możesz 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).
W ramach procedury można określić WithEvents tylko zmienne składowe, a nie zmienne lokalne. Jeśli określisz WithEvents, typ danych zmiennej musi być określonym typem klasy, a nie Object. Nie można zadeklarować tablicy za pomocą WithEventspolecenia . Aby uzyskać więcej informacji na temat zdarzeń, zobacz Zdarzenia.
Uwaga / Notatka
Kod poza klasą, strukturą lub modułem musi kwalifikować nazwę zmiennej składowej o nazwie tej klasy, struktury lub modułu. Kod poza procedurą lub blokiem nie może odwoływać się do żadnych zmiennych lokalnych w ramach tej procedury lub bloku.
Zwalnianie zasobów zarządzanych
Moduł odśmiecający elementy bezużyteczne programu .NET Framework usuwa zasoby zarządzane bez konieczności dodatkowego kodowania w danej części. Można jednak wymusić usunięcie zarządzanego zasobu zamiast czekać na moduł odśmiecenia pamięci.
Jeśli klasa trzyma się szczególnie cennego i ograniczonego zasobu (takiego jak połączenie z bazą danych lub uchwyt pliku), możesz nie chcieć poczekać na następne odzyskiwanie pamięci, aby wyczyścić wystąpienie klasy, które nie jest już używane. Klasa może zaimplementować IDisposable interfejs, aby zapewnić sposób zwalniania zasobów przed odzyskiwaniem pamięci. Klasa, która implementuje ten interfejs, uwidacznia metodę Dispose , którą można wywołać, aby wymusić natychmiastowe zwolnienie cennych zasobów.
Instrukcja Using automatyzuje proces uzyskiwania zasobu, wykonywania zestawu instrukcji, a następnie usuwania zasobu. Jednak zasób musi implementować IDisposable interfejs. Aby uzyskać więcej informacji, zobacz Using Statement (Używanie instrukcji).
Przykład 1
Poniższy przykład deklaruje zmienne przy użyciu instrukcji Dim z różnymi opcjami.
' Declare and initialize a Long variable.
Dim startingAmount As Long = 500
' 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}
Przykład 2
W poniższym przykładzie wymieniono liczby pierwsze z zakresu od 1 do 30. Zakres zmiennych lokalnych jest opisany w komentarzach 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
Przykład 3
W poniższym przykładzie zmienna speedValue jest zadeklarowana na poziomie klasy. Słowo Private kluczowe służy do deklarowania zmiennej. Dostęp do zmiennej Car można uzyskać za pomocą dowolnej procedury w klasie .
' 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 także
- Instrukcja Const
- Instrukcja ReDim
- Instrukcja Option Explicit
- Instrukcja Option Infer
- Instrukcja Option Strict
- skompilowana strona, projektant projektu (Visual Basic)
- Deklaracja zmiennej
- tablice
- Inicjatory obiektów: typy nazwane i anonimowe
- Typy anonimowe
- Inicjatory obiektów: typy nazwane i anonimowe
- Instrukcje: deklarowanie obiektu za pomocą inicjatora obiektu
- Wnioskowanie typu lokalnego