Dim – příkaz (Visual Basic)

Deklaruje a přiděluje prostor úložiště pro jednu nebo více proměnných.

Syntax

[ <attributelist> ] [ accessmodifier ] [[ Shared ] [ Shadows ] | [ Static ]] [ ReadOnly ]
Dim [ WithEvents ] variablelist

Součásti

  • attributelist

    Nepovinný parametr. Viz seznam atributů.

  • accessmodifier

    Nepovinný parametr. Může to být jedna z následujících:

    Podívejte se na úrovně přístupu v Visual Basic.

  • Shared

    Nepovinný parametr. Viz Shared.

  • Shadows

    Nepovinný parametr. Viz Shadows.

  • Static

    Nepovinný parametr. Viz static.

  • ReadOnly

    Nepovinný parametr. Zobrazit jen pro čtení.

  • WithEvents

    Nepovinný parametr. Určuje, že se jedná o objektové proměnné, které odkazují na instance třídy, které mohou vyvolat události. Viz WithEvents.

  • variablelist

    Povinná hodnota. Seznam proměnných, které jsou deklarovány v tomto příkazu.

    variable [ , variable ... ]

    Každá variable z nich má následující syntaxi a části:

    variablename [ ( [ boundslist ] ) ] [ As [ New ] datatype [ With{[ .propertyname = propinitializer [ , ... ] ] } ] ] [ = initializer ]

    Část Popis
    variablename Povinná hodnota. Název proměnné Viz deklarované názvy elementů.
    boundslist Nepovinný parametr. Seznam mezí jednotlivých dimenzí proměnné pole
    New Nepovinný parametr. Vytvoří novou instanci třídy při Dim spuštění příkazu.
    datatype Nepovinný parametr. Datový typ proměnné
    With Nepovinný parametr. Zavádí seznam inicializátorů objektů.
    propertyname Nepovinný parametr. Název vlastnosti ve třídě, pro kterou vytváříte instanci.
    propinitializer Vyžadováno po propertyname =. Výraz, který je vyhodnocen a přiřazen k názvu vlastnosti.
    initializer Nepovinné New , pokud není zadáno. Výraz, který je vyhodnocen a přiřazen k proměnné při jejím vytvoření.

Poznámky

kompilátor Visual Basic používá Dim příkaz k určení datového typu proměnné a dalších informací, jako je například jaký kód má přístup k proměnné. Následující příklad deklaruje proměnnou pro uchování Integer hodnoty.

Dim numberOfStudents As Integer

Můžete zadat libovolný datový typ nebo název výčtu, struktury, třídy nebo rozhraní.

Dim finished As Boolean
Dim monitorBox As System.Windows.Forms.Form

V případě typu odkazu použijete New klíčové slovo k vytvoření nové instance třídy nebo struktury, která je určena datovým typem. Pokud používáte New , nepoužívejte výraz inicializátoru. Místo toho zadáte argumenty, pokud jsou požadovány, do konstruktoru třídy, ze které vytváříte proměnnou.

Dim bottomLabel As New System.Windows.Forms.Label

Proměnnou lze deklarovat v proceduře, bloku, třídě, struktuře nebo modulu. Nelze deklarovat proměnnou ve zdrojovém souboru, oboru názvů nebo rozhraní. Další informace najdete v tématu deklarace kontextů a výchozích úrovní přístupu.

Proměnná deklarovaná na úrovni modulu, mimo jakoukoli proceduru, je členskou proměnnou nebo polem. Členské proměnné jsou v oboru v rámci své třídy, struktury nebo modulu. Proměnná, která je deklarována na úrovni procedury, je místní proměnná. Lokální proměnné jsou v oboru pouze v rámci jejich procedury nebo bloku.

Následující modifikátory přístupu se používají k deklarování proměnných mimo proceduru: Public , Protected , Friend , Protected Friend a Private . Další informace najdete v tématu úrovně přístupu v Visual Basic.

DimKlíčové slovo je nepovinné a obvykle se vynechává, pokud zadáte následující modifikátory: Public , Protected , Friend , Protected Friend , Private , Shared , Shadows , Static , ReadOnly nebo WithEvents .

Public maximumAllowed As Double
Protected Friend currentUserName As String
Private salary As Decimal
Static runningTotal As Integer

Pokud Option Explicit je zapnuto (výchozí), kompilátor vyžaduje deklaraci pro každou proměnnou, kterou používáte. Další informace naleznete v tématu Option Explicit – příkaz.

Určení počáteční hodnoty

Můžete přiřadit hodnotu proměnné při jejím vytvoření. Pro typ hodnoty použijete inicializátor k zadání výrazu, který má být přiřazen proměnné. Výraz se musí vyhodnotit na konstantu, kterou lze vypočítat v době kompilace.

Dim quantity As Integer = 10
Dim message As String = "Just started"

Pokud je určen inicializátor a datový typ není zadán v As klauzuli, je použita odvození typu pro odvození datového typu z inicializátoru. V následujícím příkladu num1 a num2 jsou silného typu jako celá čísla. Ve druhé deklaraci typu odvození typu odvodí typ z hodnoty 3.

' Use explicit typing.
Dim num1 As Integer = 3

' Use local type inference.
Dim num2 = 3

Odvození typu se vztahuje na úroveň procedury. Nevztahuje se mimo proceduru ve třídě, struktuře, modulu nebo rozhraní. Další informace o odvození typu naleznete v tématu Option include Statement a místní typ odvození.

Informace o tom, co se stane, když není zadán datový typ nebo inicializátor, naleznete v části výchozí datové typy a hodnoty dále v tomto tématu.

Můžete použít inicializátor objektu pro deklaraci instancí pojmenovaného a anonymního typu. Následující kód vytvoří instanci Student třídy a k inicializaci vlastností používá inicializátor objektu.

Dim student1 As New Student With {.First = "Michael",
                                  .Last = "Tucker"}

Další informace o inicializátorech objektů naleznete v tématu How to: Declare a Object Usinga inicializátor Object, Inicializátory objektů: pojmenované a anonymní typya anonymní typy.

Deklarace více proměnných

Můžete deklarovat několik proměnných v jednom příkazu deklarace, zadat název proměnné pro každý z nich a za každým názvem pole pomocí závorek. Více proměnných je odděleno čárkami.

Dim lastTime, nextTime, allTimes() As Date

Pokud deklarujete více než jednu proměnnou s jednou As klauzulí, nemůžete pro tuto skupinu proměnných dodat inicializátor.

Pro As každou proměnnou, kterou deklarujete, můžete zadat různé typy dat pro různé proměnné. Každá proměnná přebírá datový typ zadaný v první klauzuli, která As byla zjištěna po jeho variablename části.

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

Pole

Můžete deklarovat proměnnou pro uchování pole, které může obsahovat více hodnot. Chcete-li určit, že proměnná obsahuje pole, postupujte variablename okamžitě se závorkami. Další informace o polích naleznete v tématu Arrays.

Můžete zadat dolní a horní mez každého rozměru pole. Provedete to tak, že zadáte boundslist uvnitř závorek. Pro každou dimenzi boundslist Určuje horní mez a volitelně i dolní mez. Dolní mez je vždycky nulová, ať už ji zadáte, nebo ne. Každý index se může od nuly pohybovat od hodnoty horní meze.

Následující dva příkazy jsou ekvivalentní. Každý příkaz deklaruje pole 21 Integer prvků. Když přistupujete k poli, index se může lišit od 0 do 20.

Dim totals(20) As Integer
Dim totals(0 To 20) As Integer

Následující příkaz deklaruje dvojrozměrné pole typu Double . Pole má 4 řádky (3 + 1) z 6 sloupců (5 + 1). Všimněte si, že horní mez představuje nejvyšší možnou hodnotu indexu, nikoli délku dimenze. Délka dimenze je horní mez plus jedna.

Dim matrix2(3, 5) As Double

Pole může mít 1 až 32 dimenzí.

V deklaraci pole můžete ponechat všechny meze prázdné. Pokud to uděláte, pole má počet dimenzí, které zadáte, ale není inicializovaný. Má hodnotu, Nothing dokud neinicializujete alespoň některé z jeho prvků. DimPříkaz musí specifikovat meze pro všechny dimenze nebo pro žádné dimenze.

' Declare an array with blank array bounds.
Dim messages() As String
' Initialize the array.
ReDim messages(4)

Pokud má pole více než jednu dimenzi, je nutné zahrnout čárky mezi závorky, které označují počet rozměrů.

Dim oneDimension(), twoDimensions(,), threeDimensions(,,) As Byte

Pole s nulovou délkou můžete deklarovat deklarováním jednoho z dimenzí pole, které je-1. Proměnná, která obsahuje pole s nulovou délkou, nemá hodnotu Nothing . Pole s nulovou délkou jsou vyžadovány některými funkcemi modulu CLR (Common Language Runtime). Pokud se pokusíte o přístup k takovému poli, dojde k výjimce modulu runtime. Další informace naleznete v tématu pole.

Hodnoty pole lze inicializovat pomocí literálu pole. Chcete-li to provést, uzavřete inicializační hodnoty pomocí složených závorek ( {} ).

Dim longArray() As Long = {0, 1, 2, 3}

Pro multidimenzionální pole je inicializace pro každou samostatnou dimenzi uzavřena do složených závorek ve vnější dimenzi. Prvky jsou uvedeny v pořadí podle hlavní řady.

Dim twoDimensions(,) As Integer = {{0, 1, 2}, {10, 11, 12}}

Další informace o literálech pole naleznete v tématu Arrays.

Výchozí datové typy a hodnoty

Následující tabulka popisuje výsledky různých kombinací určení datového typu a inicializátoru v Dim příkazu.

Byl zadán datový typ? Byl určen inicializátor? Příklad Výsledek
No No Dim qty Pokud je možnost Option Strict vypnutá (výchozí nastavení), proměnná je nastavená na Nothing .

Pokud Option Strict je, dojde k chybě při kompilaci.
No Ano Dim qty = 5 Pokud je nastavená možnost odvodit (výchozí), proměnná vezme datový typ inicializátoru. Viz odvození místního typu.

Pokud Option Infer je vypnutý a Option Strict je vypnutý, proměnná vezme datový typ Object .

Pokud Option Infer je vypnutý a Option Strict je zapnutý, dojde k chybě při kompilaci.
Ano No Dim qty As Integer Proměnná je inicializována na výchozí hodnotu pro datový typ. Další informace najdete v tabulce dále v této části.
Ano Ano Dim qty As Integer = 5 Pokud datový typ inicializátoru nelze převést na zadaný datový typ, dojde k chybě při kompilaci.

zadáte-li datový typ, ale nezadáte inicializátor, Visual Basic inicializuje proměnnou na výchozí hodnotu pro svůj datový typ. V následující tabulce jsou uvedeny výchozí inicializační hodnoty.

Datový typ Výchozí hodnota
Všechny číselné typy (včetně Byte a SByte ) 0
Char Binární hodnota 0
Všechny typy odkazů (včetně Object , String a všechna pole) Nothing
Boolean False
Date 12:00 z 1. ledna v roce 1 (01/01/0001 12:00:00 dop.)

Každý prvek struktury je inicializován, jako by šlo o samostatnou proměnnou. Pokud deklarujete délku pole, ale neinicializujete jeho prvky, každý prvek je inicializován, jako by šlo o samostatnou proměnnou.

Životnost statické lokální proměnné

StaticLokální proměnná má delší životnost než procedura, ve které je deklarována. Hranice životnosti proměnné závisí na tom, kde je procedura deklarována a zda je Shared .

Deklarace procedury Proměnná inicializovaná Proměnná zastaví existující.
V modulu Při prvním volání procedury Když váš program zastaví provádění
Ve třídě nebo struktuře je procedura Shared Při prvním volání procedury buď na konkrétní instanci, nebo v samotné třídě nebo struktuře Když váš program zastaví provádění
V třídě nebo struktuře není procedura Shared Při prvním volání procedury na konkrétní instanci Při uvolnění instance pro uvolňování paměti (GC)

Atributy a modifikátory

Můžete použít atributy pouze na členské proměnné, nikoli na lokální proměnné. Atribut přispívá k metadatům sestavení, která nejsou smysluplná pro dočasné úložiště, jako jsou místní proměnné.

Na úrovni modulu nemůžete použít Static Modifikátor k deklaraci proměnných členů. Na úrovni procedury nemůžete použít Shared Shadows ReadOnly WithEvents žádné modifikátory přístupu k deklaraci místních proměnných.

Můžete určit, ke kterému kódu má přístup k proměnné, zadáním accessmodifier . Proměnné členů třídy a modulu (mimo všechny procedury) výchozí pro privátní přístup a proměnné členů struktury jako výchozí pro veřejný přístup. Můžete upravit jejich úrovně přístupu modifikátory přístupu. Modifikátory přístupu nemůžete použít u místních proměnných (uvnitř procedury).

V WithEvents rámci procedury lze zadat pouze členské proměnné, nikoli místní proměnné. Pokud zadáte WithEvents , datový typ proměnné musí být konkrétní typ třídy, ne Object . Nelze deklarovat pole s WithEvents . Další informace o událostech najdete v tématu události.

Poznámka

Kód mimo třídu, strukturu nebo modul musí kvalifikovat název členské proměnné s názvem této třídy, struktury nebo modulu. Kód mimo proceduru nebo blok nemůže odkazovat na žádné místní proměnné v rámci tohoto postupu nebo bloku.

Uvolňování spravovaných prostředků

systém uvolňování paměti .NET Framework uvolní spravované prostředky bez jakéhokoli dalšího kódování na vaší straně. Místo toho, abyste čekali na uvolňování paměti, ale můžete vynutit vyřazení spravovaného prostředku.

Pokud třída obsahuje obzvláště cenný a omezených prostředek (například připojení k databázi nebo popisovač souboru), nebudete chtít počkat do dalšího uvolňování paměti, aby se vyčistila instance třídy, která se už nepoužívá. Třída může implementovat IDisposable rozhraní, aby poskytovala způsob uvolnění prostředků před uvolňováním paměti. Třída, která implementuje toto rozhraní, zpřístupňuje Dispose metodu, která může být volána k vynucení cenných prostředků, které budou uvolněny okamžitě.

UsingPříkaz automatizuje proces získání prostředku, spuštění sady příkazů a následné likvidaci prostředku. Prostředek však musí implementovat IDisposable rozhraní. Další informace naleznete v tématu using – příkaz.

Příklad 1

Následující příklad deklaruje proměnné pomocí Dim příkazu s různými možnostmi.

' 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}

Příklad 2

Následující příklad uvádí hlavní čísla mezi 1 a 30. Rozsah místních proměnných je popsán v komentářích ke kódu.

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

Příklad 3

V následujícím příkladu je speedValue proměnná deklarována na úrovni třídy. Klíčové Private slovo se používá k deklaraci proměnné . K proměnné lze přistupovat libovolnou procedurou ve Car třídě .

' 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

Viz také