Dim utasítás (Visual Basic)
Deklarálja és lefoglalja a tárterületet egy vagy több változó számára.
Syntax
[ <attributelist> ] [ accessmodifier ] [[ Shared ] [ Shadows ] | [ Static ]] [ ReadOnly ]
Dim [ WithEvents ] variablelist
Részek
attributelist
Opcionális. Lásd: Attribútumlista.
accessmodifier
Opcionális. A következők egyike lehet:
Lásd a Visual Basic hozzáférési szintjeinek megtekintését.
Shared
Opcionális. Lásd: Megosztott.
Shadows
Opcionális. Lásd: Árnyékok.
Static
Opcionális. Lásd: Statikus.
ReadOnly
Opcionális. Lásd: ReadOnly.
WithEvents
Opcionális. Megadja, hogy ezek olyan objektumváltozók, amelyek egy olyan osztály példányára hivatkoznak, amely eseményeket képes létrehozni. Lásd: WithEvents.
variablelist
Szükséges. A jelen utasításban deklarált változók listája.
variable [ , variable ... ]
Mindegyik
variable
a következő szintaxist és részeket tartalmazza:variablename [ ( [ boundslist ] ) ] [ As [ New ] datatype [ With
{[ .propertyname = propinitializer [ , ... ] ] } ] ] [ = initializer ]
Része Leírás variablename
Szükséges. A változó neve. Lásd: Deklarált elemnevek. boundslist
Opcionális. Tömbváltozó egyes dimenzióinak határainak listája. New
Opcionális. Az utasítás futtatásakor létrehozza az osztály új példányát Dim
.datatype
Opcionális. A változó adattípusa. With
Opcionális. Bemutatja az objektum-inicializálók listáját. propertyname
Opcionális. Egy tulajdonság neve abban az osztályban, amelyből példányt készít. propinitializer
=után propertyname
kötelező megadni. A kiértékelt és a tulajdonságnévhez rendelt kifejezés.initializer
Nem kötelező, ha New
nincs megadva. A változó létrehozásakor kiértékelt és hozzárendelt kifejezés.
Megjegyzések
A Visual Basic fordítója az Dim
utasítással határozza meg a változó adattípusát és egyéb adatait, például azt, hogy milyen kód férhet hozzá a változóhoz. Az alábbi példa egy változót deklarál egy Integer
érték tárolására.
Dim numberOfStudents As Integer
Bármilyen adattípust vagy enumerálás, struktúra, osztály vagy felület nevét megadhatja.
Dim finished As Boolean
Dim monitorBox As System.Windows.Forms.Form
Referenciatípus esetén a New
kulcsszóval hozza létre az adattípus által megadott osztály vagy struktúra új példányát. Ha használja New
, akkor nem használ inicializáló kifejezést. Ehelyett argumentumokat kell megadnia, ha szükséges, annak az osztálynak a konstruktorának, amelyből a változót létrehozza.
Dim bottomLabel As New System.Windows.Forms.Label
Egy változót deklarálhat egy eljárásban, blokkban, osztályban, struktúrában vagy modulban. Nem deklarálhat változót forrásfájlban, névtérben vagy felületen. További információ: Deklarációs környezetek és alapértelmezett hozzáférési szintek.
A modul szintjén deklarált változó bármely eljáráson kívül tagváltozó vagy mező. A tagváltozók a teljes osztályban, struktúrában vagy modulban hatókörben vannak. Az eljárás szintjén deklarált változó helyi változó. A helyi változók csak az eljárásukon vagy blokkjaikon belül vannak hatókörben.
Az eljáráson kívüli változók deklarálásához a következő hozzáférési módosítók használhatók: Public
, Protected
, Friend
, Protected Friend
és Private
. További információ: Hozzáférési szintek a Visual Basicben.
A Dim
kulcsszó nem kötelező, és általában hiányzik, ha a következő módosítók valamelyikét adja meg: Public
, , Protected
, Friend
, Protected Friend
Private
, , Shared
, Shadows
, Static
ReadOnly
, vagy WithEvents
.
Public maximumAllowed As Double
Protected Friend currentUserName As String
Private salary As Decimal
Static runningTotal As Integer
Ha Option Explicit
be van kapcsolva (az alapértelmezett), a fordítónak minden használt változóhoz deklarációra van szüksége. További információ: Option Explicit Utasítás.
Kezdeti érték megadása
Az értékeket a létrehozásukkor hozzárendelheti egy változóhoz. Értéktípus esetén inicializálóval adja meg a változóhoz rendelendő kifejezést. A kifejezésnek egy olyan állandóra kell kiértékelnie, amely a fordítás időpontjában számítható ki.
Dim quantity As Integer = 10
Dim message As String = "Just started"
Ha egy inicializáló van megadva, és nincs megadva adattípus egy As
záradékban, a rendszer típuskövetkeztetést használ az inicializáló adattípusának következtetéséhez. Az alábbi példában mindkettő num1
, és num2
erősen egész számként van begépelve. A második deklarációban a típuskövetkeztetés a típust a 3 értékből következteti.
' Use explicit typing.
Dim num1 As Integer = 3
' Use local type inference.
Dim num2 = 3
A típuskövetkeztetés az eljárás szintjén érvényes. Nem alkalmazható egy osztály, struktúra, modul vagy interfész eljárásán kívül. A típuskövetkeztetésről további információt az Option Infer Utasítás és a Helyi típus következtetése című témakörben talál.
További információ arról, hogy mi történik, ha nincs megadva adattípus vagy inicializáló, lásd a jelen témakör későbbi, Alapértelmezett adattípusai és értékei című szakaszát.
Az objektum-inicializálóval névvel ellátott és névtelen típusú példányokat deklarálhat. Az alábbi kód létrehoz egy osztálypéldányt Student
, és objektum inicializáló használatával inicializálja a tulajdonságokat.
Dim student1 As New Student With {.First = "Michael",
.Last = "Tucker"}
Az objektum-inicializálókkal kapcsolatos további információkért lásd: Objektum deklarálása objektum inicializáló használatával, Objektum inicializálók: Névvel ellátott és névtelen típusok, névtelen típusok.
Több változó deklarálása
Több változót is deklarálhat egy deklarációs utasításban, megadva az egyes változók nevét, és zárójelekkel követheti az egyes tömbneveket. Több változót vessző választ el egymástól.
Dim lastTime, nextTime, allTimes() As Date
Ha egynél több változót deklarál egy As
záradékkal, az adott változócsoporthoz nem adhat meg inicializálót.
A különböző változókhoz különböző adattípusokat adhat meg egy külön As
záradék használatával minden egyes deklarált változóhoz. Minden változó az első As
záradékban megadott adattípust veszi fel, amely a része után jelenik variablename
meg.
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
Tömbök
Deklarálhat egy változót egy tömb tárolására, amely több értéket is tartalmazhat. Ha meg szeretné adni, hogy egy változó tartalmaz-e tömböt, kövesse variablename
a tömböt zárójelekkel. A tömbökről további információt a Tömbök című témakörben talál.
Megadhatja egy tömb minden dimenziójának alsó és felső határát. Ehhez adjon meg egy boundslist
zárójelet. Minden dimenzió esetében a boundslist
felső és opcionálisan az alsó határt adja meg. Az alsó határ mindig nulla, akár megadja, akár nem. Az egyes indexek a felső kötött értéktől függően nullától eltérőek lehetnek.
Az alábbi két utasítás egyenértékű. Minden utasítás 21 Integer
elemből álló tömböt deklarál. A tömb elérésekor az index 0 és 20 közötti lehet.
Dim totals(20) As Integer
Dim totals(0 To 20) As Integer
Az alábbi utasítás egy kétdimenziós tömböt Double
deklarál. A tömb 4 sorból (3 + 1) 6 oszlopból (5 + 1) áll. Vegye figyelembe, hogy a felső határ az index lehetséges legmagasabb értékét jelöli, nem a dimenzió hosszát. A méret hossza a felső határ plusz egy.
Dim matrix2(3, 5) As Double
A tömbök mérete 1 és 32 között lehet.
Az összes korlátot üresen hagyhatja egy tömbdeklarációban. Ha ezt teszi, a tömb a megadott számú dimenzióval rendelkezik, de nem inicializálódik. Értéke addig van Nothing
, amíg el nem inicializálja legalább néhány elemét. Az Dim
utasításnak meg kell adnia a korlátokat az összes dimenzióhoz vagy egyetlen dimenzióhoz sem.
' Declare an array with blank array bounds.
Dim messages() As String
' Initialize the array.
ReDim messages(4)
Ha a tömb több dimenzióval is rendelkezik, a zárójelek között vesszőket kell tartalmaznia a dimenziók számának jelzéséhez.
Dim oneDimension(), twoDimensions(,), threeDimensions(,,) As Byte
Nulla hosszúságú tömb deklarálható úgy, hogy a tömb egyik dimenzióját -1-nek deklarálja. A nulla hosszúságú tömböt tartalmazó változó nem rendelkezik az értékkel Nothing
. Bizonyos gyakori nyelvi futtatókörnyezeti függvények nulla hosszúságú tömböket igényelnek. Ha megpróbál hozzáférni egy ilyen tömbhöz, futásidejű kivétel lép fel. További információ: Tömbök.
A tömb értékeit egy tömbkonstans használatával inicializálhatja. Ehhez vegye körül az inicializálási értékeket kapcsos zárójelekkel ({}
).
Dim longArray() As Long = {0, 1, 2, 3}
Többdimenziós tömbök esetén az egyes különálló dimenziók inicializálása a külső dimenzióban kapcsos zárójelek közé kerül. Az elemek sor-fő sorrendben vannak megadva.
Dim twoDimensions(,) As Integer = {{0, 1, 2}, {10, 11, 12}}
A tömbkonstansokról további információt a Tömbök című témakörben talál.
Alapértelmezett adattípusok és értékek
Az alábbi táblázat az adattípus és az inicializáló Dim
utasítás különböző kombinációinak eredményeit ismerteti.
Adattípus megadva? | Inicializáló van megadva? | Példa | Eredmény |
---|---|---|---|
Nem | Nem | Dim qty |
Ha a Szigorú beállítás ki van kapcsolva (az alapértelmezett), a változó Nothing értéke .Ha Option Strict be van kapcsolva, fordítási időhiba lép fel. |
Nem | Igen | Dim qty = 5 |
Ha az Option Infer be van kapcsolva (az alapértelmezett), a változó az inicializáló adattípusát veszi fel. Lásd: Helyi típus következtetése. Ha Option Infer ki van kapcsolva, és Option Strict ki van kapcsolva, a változó a következő adattípust Object veszi fel: .Ha Option Infer ki van kapcsolva, és Option Strict be van kapcsolva, fordítási időhiba lép fel. |
Igen | Nem | Dim qty As Integer |
A változó inicializálása az adattípus alapértelmezett értékére történik. Tekintse meg a táblázatot a szakasz későbbi részében. |
Igen | Igen | Dim qty As Integer = 5 |
Ha az inicializáló adattípusa nem konvertálható a megadott adattípusra, fordítási időhiba lép fel. |
Ha adattípust ad meg, de nem ad meg inicializálót, a Visual Basic inicializálja a változót az adattípus alapértelmezett értékére. Az alábbi táblázat az alapértelmezett inicializálási értékeket mutatja.
Adattípus | Alapértelmezett érték |
---|---|
Minden numerikus típus (beleértve Byte és SByte ) |
0 |
Char |
Bináris 0 |
Minden referenciatípus (beleértve Object a , String és az összes tömböt) |
Nothing |
Boolean |
False |
Date |
Január 1-jének 12:00 órai (01/01/0001 12:00:00) |
A struktúra minden eleme inicializálva van, mintha külön változó lenne. Ha egy tömb hosszát deklarálja, de nem inicializálja az elemeit, minden elem inicializálva lesz, mintha külön változó lenne.
Statikus helyi változó élettartama
A Static
helyi változó élettartama hosszabb, mint annak az eljárásnak az élettartama, amelyben deklarálva van. A változó élettartamának határai attól függenek, hogy hol deklarálják az eljárást, és hogy van-e Shared
.
Eljárás deklarációja | Változó inicializálva | A változó leállítja a meglévőt |
---|---|---|
Modulban | Az eljárás első meghívása | Amikor a program leállítja a végrehajtást |
Osztályban vagy struktúrában az eljárás Shared |
Az első alkalommal, amikor az eljárást meghívják egy adott példányon, vagy maga az osztály vagy a struktúra | Amikor a program leállítja a végrehajtást |
Osztályban vagy struktúrában az eljárás nem Shared |
Az eljárás első meghívása egy adott példányon | A példány szemétgyűjtéshez (GC) való kiadásakor |
Attribútumok és módosítók
Attribútumokat csak tagváltozókra alkalmazhat, helyi változókra nem. Az attribútumok információkat adnak hozzá a szerelvény metaadataihoz, ami nem értelmezhető az ideiglenes tárolás, például a helyi változók esetében.
Modulszinten nem használhatja a módosítót tagváltozók Static
deklarálásához. Eljárásszinten a helyi változók deklarálásához nem használhat Shared
, Shadows
, ReadOnly
, vagy WithEvents
bármilyen hozzáférési módosítót.
Megadhatja, hogy melyik kód férhet hozzá egy változóhoz egy accessmodifier
. Az osztály- és modultagváltozók (az eljáráson kívül) alapértelmezés szerint a privát hozzáférés, a struktúratag változói pedig alapértelmezés szerint a nyilvános hozzáféréshez tartoznak. A hozzáférési szinteket a hozzáférési módosítókkal módosíthatja. A hozzáférési módosítókat nem használhatja helyi változókon (eljáráson belül).
Csak tagváltozók esetén adható meg WithEvents
, az eljáráson belüli helyi változókon nem. Ha megadja WithEvents
, a változó adattípusának egy adott osztálytípusnak kell lennie, nem Object
pedig egy adott osztálytípusnak. Nem deklarálhat tömböt a következővel WithEvents
: . Az eseményekről további információt az Események című témakörben talál.
Feljegyzés
Az osztályon, struktúrán vagy modulon kívüli kódnak egy tagváltozó nevét kell minősítenie az adott osztály, struktúra vagy modul nevével. Az eljáráson vagy blokkon kívüli kód nem hivatkozhat az eljáráson vagy blokkon belüli helyi változókra.
Felügyelt erőforrások felszabadítása
A .NET-keretrendszer szemétgyűjtő a felügyelt erőforrásokat anélkül dobja el, hogy további kódolást alkalmaz az Ön részéről. A szemétgyűjtőre való várakozás helyett azonban kényszerítheti egy felügyelt erőforrás ártalmatlanítását.
Ha egy osztály különösen értékes és szűkös erőforráshoz (például adatbázis-kapcsolathoz vagy fájlleíróhoz) tartozik, nem érdemes megvárni a következő szemétgyűjtést, hogy megtisztítsa a már nem használt osztálypéldányt. Az osztály implementálhatja az IDisposable interfészt, hogy módot biztosítson az erőforrások szemétgyűjtés előtti kiadására. Az interfészt megvalósító osztály egy Dispose
metódust tesz elérhetővé, amely meghívható, hogy az értékes erőforrásokat azonnal felszabadítsa.
Az Using
utasítás automatizálja egy erőforrás beszerzésének, egy utasításkészlet végrehajtásának, majd az erőforrás eltávolításának folyamatát. Az erőforrásnak azonban implementálnia kell az interfészt IDisposable . További információ: Az utasítás használata.
1. példa
Az alábbi példa különböző beállításokkal deklarálja a változókat az Dim
utasítás használatával.
' 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}
2. példa
Az alábbi példa az 1 és 30 közötti prímszámokat sorolja fel. A helyi változók hatókörét a kód megjegyzései ismertetik.
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
3. példa
Az alábbi példában a speedValue
változó az osztály szintjén van deklarálva. A Private
kulcsszó a változó deklarálásához használatos. A változó az osztály bármely eljárásával Car
elérhető.
' 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
Lásd még
- Const utasítás
- ReDim utasítás
- Explicit beállítási utasítás
- Option Infer Utasítás
- Option Strict Utasítás
- Lap fordítása, Project Tervező (Visual Basic)
- Változó deklarációja
- Tömbök
- Objektum inicializálói: Névvel ellátott és névtelen típusok
- Névtelen típusok
- Objektum inicializálói: Névvel ellátott és névtelen típusok
- Útmutató: Objektum deklarálása objektum inicializáló használatával
- Helyi típus következtetése
Visszajelzés
https://aka.ms/ContentUserFeedback.
Hamarosan elérhető: 2024-ben fokozatosan kivezetjük a GitHub-problémákat a tartalom visszajelzési mechanizmusaként, és lecseréljük egy új visszajelzési rendszerre. További információ:Visszajelzés küldése és megtekintése a következőhöz: