Dim-instructie (Visual Basic)
Declareert en wijst opslagruimte toe voor een of meer variabelen.
Syntaxis
[ <attributelist> ] [ accessmodifier ] [[ Shared ] [ Shadows ] | [ Static ]] [ ReadOnly ]
Dim [ WithEvents ] variablelist
generator
attributelist
Optioneel. Zie de lijst met kenmerken.
accessmodifier
Optioneel. Dit kan een van de volgende zijn:
Shared
Optioneel. Zie Gedeeld.
Shadows
Optioneel. Zie schaduwen.
Static
Optioneel. Zie Statisch.
ReadOnly
Optioneel. Zie ReadOnly.
WithEvents
Optioneel. Hiermee geeft u op dat dit objectvariabelen zijn die verwijzen naar exemplaren van een klasse die gebeurtenissen kan genereren. Zie WithEvents.
variablelist
Vereist. Lijst met variabelen die in deze instructie worden gedeclareerd.
variable [ , variable ... ]
Elk
variable
heeft de volgende syntaxis en onderdelen:variablename [ ( [ boundslist ] ) ] [ As [ New ] datatype [ With
{[ .propertyname = propinitializer [ , ... ] ] } ] ] [ = initializer ]
Onderdeel Beschrijving variablename
Vereist. Naam van de variabele. Zie Gedeclareerde elementnamen. boundslist
Optioneel. Lijst met grenzen van elke dimensie van een matrixvariabele. New
Optioneel. Hiermee maakt u een nieuw exemplaar van de klasse wanneer de Dim
instructie wordt uitgevoerd.datatype
Optioneel. Gegevenstype van de variabele. With
Optioneel. Introduceert de lijst met object-initialisatiefuncties. propertyname
Optioneel. De naam van een eigenschap in de klasse waarvan u een exemplaar maakt. propinitializer
Vereist na propertyname
=. De expressie die wordt geëvalueerd en toegewezen aan de naam van de eigenschap.initializer
Optioneel als New
dit niet is opgegeven. Expressie die wordt geëvalueerd en toegewezen aan de variabele wanneer deze wordt gemaakt.
Opmerkingen
De Visual Basic-compiler gebruikt de Dim
instructie om het gegevenstype van de variabele en andere informatie te bepalen, zoals welke code toegang heeft tot de variabele. In het volgende voorbeeld wordt een variabele gede declareren voor het opslaan van een Integer
waarde.
Dim numberOfStudents As Integer
U kunt elk gegevenstype of de naam van een opsomming, structuur, klasse of interface opgeven.
Dim finished As Boolean
Dim monitorBox As System.Windows.Forms.Form
Voor een verwijzingstype gebruikt u het New
trefwoord om een nieuw exemplaar te maken van de klasse of structuur die is opgegeven door het gegevenstype. Als u gebruikt New
, gebruikt u geen initialisatie-expressie. In plaats daarvan geeft u argumenten op, indien nodig, aan de constructor van de klasse waaruit u de variabele maakt.
Dim bottomLabel As New System.Windows.Forms.Label
U kunt een variabele declareren in een procedure, blok, klasse, structuur of module. U kunt geen variabele declareren in een bronbestand, naamruimte of interface. Zie Declaratiecontexten en standaardtoegangsniveaus voor meer informatie.
Een variabele die buiten een procedure op moduleniveau wordt gedeclareerd, is een lidvariabele of veld. Lidvariabelen vallen binnen het bereik van hun klasse, structuur of module. Een variabele die op procedureniveau wordt gedeclareerd, is een lokale variabele. Lokale variabelen vallen alleen binnen het bereik binnen hun procedure of blok.
De volgende toegangsaanpassingen worden gebruikt om variabelen buiten een procedure te declareren: Public
, Protected
, Friend
, Protected Friend
, en Private
. Zie Access-niveaus in Visual Basic voor meer informatie.
Het Dim
trefwoord is optioneel en wordt meestal weggelaten als u een van de volgende modifiers opgeeft: Public
, , Friend
Protected
, Protected Friend
, Private
, , Shared
Shadows
, , Static
, of ReadOnly
WithEvents
.
Public maximumAllowed As Double
Protected Friend currentUserName As String
Private salary As Decimal
Static runningTotal As Integer
Als Option Explicit
deze is ingeschakeld (de standaardinstelling), vereist de compiler een declaratie voor elke variabele die u gebruikt. Zie Optie expliciete instructie voor meer informatie.
Een initiële waarde opgeven
U kunt een waarde toewijzen aan een variabele wanneer deze wordt gemaakt. Voor een waardetype gebruikt u een initialisatiefunctie om een expressie op te geven die aan de variabele moet worden toegewezen. De expressie moet resulteren in een constante die tijdens het compileren kan worden berekend.
Dim quantity As Integer = 10
Dim message As String = "Just started"
Als er een initialisatiefunctie is opgegeven en er geen gegevenstype is opgegeven in een As
component, wordt typedeductie gebruikt om het gegevenstype van de initialisatiefunctie af te stellen. In het volgende voorbeeld worden beide num1
sterk num2
getypt als gehele getallen. In de tweede declaratie wordt het type afgeleid van de waarde 3.
' Use explicit typing.
Dim num1 As Integer = 3
' Use local type inference.
Dim num2 = 3
Typedeductie is van toepassing op procedureniveau. Deze is niet van toepassing buiten een procedure in een klasse, structuur, module of interface. Zie Option Infer Statement en Local Type Inference voor meer informatie over typedeductie.
Zie Standaardgegevenstypen en -waarden verderop in dit onderwerp voor informatie over wat er gebeurt wanneer een gegevenstype of initialisatiefunctie niet is opgegeven.
U kunt een object-initialisatiefunctie gebruiken om instanties van benoemde en anonieme typen te declareren. Met de volgende code wordt een exemplaar van een Student
klasse gemaakt en wordt een object-initialisatiefunctie gebruikt om eigenschappen te initialiseren.
Dim student1 As New Student With {.First = "Michael",
.Last = "Tucker"}
Zie Voor meer informatie over object initializers: Declareer een object met behulp van een Object Initializer, Object Initializers: Named and Anonymous Types, and Anonymous Types, and Anonymous Types.
Meerdere variabelen declareren
U kunt verschillende variabelen declareren in één declaratie-instructie, waarbij u de naam van de variabele voor elke variabele opgeeft en elke matrixnaam met haakjes volgt. Meerdere variabelen worden gescheiden door komma's.
Dim lastTime, nextTime, allTimes() As Date
Als u meer dan één variabele met één As
component declareert, kunt u geen initialisatie voor die groep variabelen opgeven.
U kunt verschillende gegevenstypen voor verschillende variabelen opgeven met behulp van een afzonderlijke As
component voor elke variabele die u declareert. Elke variabele gebruikt het gegevenstype dat is opgegeven in de eerste As
component die na het onderdeel is variablename
aangetroffen.
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
Matrices
U kunt een variabele declareren voor het opslaan van een matrix, die meerdere waarden kan bevatten. Als u wilt opgeven dat een variabele een matrix bevat, volgt variablename
u deze onmiddellijk met haakjes. Zie Matrices voor meer informatie over matrices.
U kunt de onder- en bovengrens van elke dimensie van een matrix opgeven. Neem hiervoor een boundslist
haakje op. Voor elke dimensie geeft u boundslist
de bovengrens en eventueel de ondergrens op. De ondergrens is altijd nul, ongeacht of u deze opgeeft of niet. Elke index kan variëren van nul tot de bovengrenswaarde.
De volgende twee instructies zijn gelijkwaardig. Elke instructie declareert een matrix van 21 Integer
elementen. Wanneer u de matrix opent, kan de index variëren van 0 tot en met 20.
Dim totals(20) As Integer
Dim totals(0 To 20) As Integer
De volgende instructie declareert een tweedimensionale matrix van het type Double
. De matrix heeft 4 rijen (3 + 1) van elk 6 kolommen (5 + 1). Houd er rekening mee dat een bovengrens de hoogst mogelijke waarde voor de index vertegenwoordigt, niet de lengte van de dimensie. De lengte van de dimensie is de bovengrens plus één.
Dim matrix2(3, 5) As Double
Een matrix kan van 1 tot 32 dimensies hebben.
U kunt alle grenzen leeg laten in een matrixdeclaratie. Als u dit doet, heeft de matrix het aantal dimensies dat u opgeeft, maar is deze niet geïnitialiseerd. De waarde heeft een waarde totdat Nothing
u ten minste enkele elementen initialiseert. De Dim
instructie moet grenzen opgeven voor alle dimensies of voor geen dimensies.
' Declare an array with blank array bounds.
Dim messages() As String
' Initialize the array.
ReDim messages(4)
Als de matrix meer dan één dimensie heeft, moet u komma's tussen de haakjes opnemen om het aantal dimensies aan te geven.
Dim oneDimension(), twoDimensions(,), threeDimensions(,,) As Byte
U kunt een matrix met lengte nul declareren door een van de dimensies van de matrix te declareren als -1. Een variabele met een matrix met lengte nul heeft de waarde Nothing
niet. Matrices met lengte nul zijn vereist voor bepaalde algemene taalruntimefuncties. Als u toegang probeert te krijgen tot een dergelijke matrix, treedt er een runtime-uitzondering op. Zie Matrices voor meer informatie.
U kunt de waarden van een matrix initialiseren met behulp van een letterlijke matrix. Hiervoor zet u de initialisatiewaarden tussen accolades ({}
).
Dim longArray() As Long = {0, 1, 2, 3}
Voor multidimensionale matrices wordt de initialisatie voor elke afzonderlijke dimensie tussen accolades in de buitendimensie geplaatst. De elementen worden opgegeven in rijvolgorde.
Dim twoDimensions(,) As Integer = {{0, 1, 2}, {10, 11, 12}}
Zie Matrices voor meer informatie over letterlijke matrices.
Standaardgegevenstypen en -waarden
In de volgende tabel worden de resultaten beschreven van verschillende combinaties van het opgeven van het gegevenstype en de initialisatiefunctie in een Dim
instructie.
Opgegeven gegevenstype? | Initialisatiefunctie opgegeven? | Opmerking | Resultaat |
---|---|---|---|
Nee | Nr. | Dim qty |
Als Option Strict is uitgeschakeld (de standaardinstelling), wordt de variabele ingesteld op Nothing .Als Option Strict dit is ingeschakeld, treedt er een compilatiefout op. |
Nr. | Ja | Dim qty = 5 |
Als Option Infer is ingeschakeld (de standaardinstelling), neemt de variabele het gegevenstype van de initialisatiefunctie. Zie deductie van het lokale type. Als Option Infer de variabele is uitgeschakeld en Option Strict is uitgeschakeld, wordt het gegevenstype van de variabele gebruikt Object .Als Option Infer deze is uitgeschakeld en Option Strict is ingeschakeld, treedt er een compilatietijdfout op. |
Ja | Nr. | Dim qty As Integer |
De variabele wordt geïnitialiseerd tot de standaardwaarde voor het gegevenstype. Zie de tabel verderop in deze sectie. |
Ja | Ja | Dim qty As Integer = 5 |
Als het gegevenstype van de initialisatiefunctie niet kan worden omgezet in het opgegeven gegevenstype, treedt er een compilatiefout op. |
Als u een gegevenstype opgeeft, maar geen initialisatiefunctie opgeeft, initialiseert Visual Basic de variabele naar de standaardwaarde voor het gegevenstype. In de volgende tabel ziet u de standaard initialisatiewaarden.
Gegevenstype | Default value |
---|---|
Alle numerieke typen (inclusief Byte en SByte ) |
0 |
Char |
Binair 0 |
Alle referentietypen (inclusief Object , String en alle matrices) |
Nothing |
Boolean |
False |
Date |
12:00 uur van 1 januari van het jaar 1 (01/01/0001 12:00:00 uur) |
Elk element van een structuur wordt geïnitialiseerd alsof het een afzonderlijke variabele is. Als u de lengte van een matrix declareert, maar de elementen niet initialiseert, wordt elk element geïnitialiseerd alsof het een afzonderlijke variabele is.
Levensduur van statische lokale variabelen
Een Static
lokale variabele heeft een langere levensduur dan die van de procedure waarin deze wordt gedeclareerd. De grenzen van de levensduur van de variabele zijn afhankelijk van waar de procedure wordt gedeclareerd en of deze is Shared
.
Proceduredeclaratie | Variabele geïnitialiseerd | Variabele stopt bestaande |
---|---|---|
In een module | De eerste keer dat de procedure wordt aangeroepen | Wanneer uw programma de uitvoering stopt |
In een klasse of structuur is de procedure Shared |
De eerste keer dat de procedure wordt aangeroepen op een specifiek exemplaar of op de klasse of structuur zelf | Wanneer uw programma de uitvoering stopt |
In een klasse of structuur is de procedure niet Shared |
De eerste keer dat de procedure wordt aangeroepen op een specifiek exemplaar | Wanneer het exemplaar wordt vrijgegeven voor garbagecollection (GC) |
Kenmerken en modifiers
U kunt kenmerken alleen toepassen op lidvariabelen, niet op lokale variabelen. Een kenmerk draagt informatie bij aan de metagegevens van de assembly, wat niet zinvol is voor tijdelijke opslag, zoals lokale variabelen.
Op moduleniveau kunt u de Static
wijzigingsfunctie niet gebruiken om lidvariabelen te declareren. Op procedureniveau kunt u geen toegangsaanpassingen gebruiken Shared
Shadows
ReadOnly
WithEvents
om lokale variabelen te declareren.
U kunt opgeven welke code toegang heeft tot een variabele door een accessmodifier
. Klasse- en modulelidvariabelen (buiten elke procedure) zijn standaard ingesteld op persoonlijke toegang en structuurlidvariabelen zijn standaard ingesteld op openbare toegang. U kunt hun toegangsniveaus aanpassen met de toegangsaanpassingen. U kunt geen toegangsmodifiers gebruiken voor lokale variabelen (binnen een procedure).
U kunt alleen opgeven WithEvents
voor lidvariabelen, niet voor lokale variabelen binnen een procedure. Als u opgeeft WithEvents
, moet het gegevenstype van de variabele een specifiek klassetype zijn, niet Object
. U kunt geen matrix declareren met WithEvents
. Zie Gebeurtenissen voor meer informatie over gebeurtenissen.
Notitie
Code buiten een klasse, structuur of module moet de naam van een lidvariabele kwalificeren met de naam van die klasse, structuur of module. Code buiten een procedure of blok kan niet verwijzen naar lokale variabelen binnen die procedure of blok.
Beheerde resources vrijgeven
De garbagecollector van .NET Framework verwijdert beheerde resources zonder extra codering aan uw kant. U kunt echter de verwijdering van een beheerde resource afdwingen in plaats van te wachten op de garbagecollector.
Als een klasse een bijzonder waardevolle en schaarse resource bevat (zoals een databaseverbinding of bestandsgreep), wilt u mogelijk niet wachten totdat de volgende garbagecollection een klasse-exemplaar opschoont dat niet meer wordt gebruikt. Een klasse kan de IDisposable interface implementeren om resources vrij te geven vóór een garbagecollection. Een klasse die deze interface implementeert, bevat een Dispose
methode die kan worden aangeroepen om waardevolle resources onmiddellijk vrij te geven.
De Using
instructie automatiseert het proces van het verkrijgen van een resource, het uitvoeren van een set instructies en het verwijderen van de resource. De resource moet echter de IDisposable interface implementeren. Zie Using Statement voor meer informatie.
Voorbeeld 1
In het volgende voorbeeld worden variabelen gede declareren met behulp van de Dim
instructie met verschillende opties.
' 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}
Voorbeeld 2
In het volgende voorbeeld worden de priemgetallen tussen 1 en 30 weergegeven. Het bereik van lokale variabelen wordt beschreven in codeopmerkingen.
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
Voorbeeld 3
In het volgende voorbeeld wordt de speedValue
variabele gedeclareerd op klasseniveau. Het Private
trefwoord wordt gebruikt om de variabele te declareren. De variabele kan worden geopend door elke procedure in de Car
klasse.
' 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
Zie ook
- Const-instructie
- ReDim-instructie
- Expliciete optie-instructie
- Instructie Option Infer
- Strikte instructie van optie
- Pagina compileren, ProjectOntwerper (Visual Basic)
- Declaratie van variabelen
- Arrays
- Object initializers: benoemde en anonieme typen
- Anonieme typen
- Object initializers: benoemde en anonieme typen
- Procedure: Een object declareren met behulp van een object-initialisatiefunctie
- Deductie van lokaal type