Dela via


Livslängd i Visual Basic

Livslängden för ett deklarerat element är den tidsperiod under vilken det är tillgängligt för användning. Variabler är de enda element som har livslängd. För detta ändamål behandlar kompilatorn procedureparametrar och funktionsreturer som specialfall av variabler. Livslängden för en variabel representerar den tidsperiod under vilken den kan innehålla ett värde. Dess värde kan ändras under dess livslängd, men det innehåller alltid ett visst värde.

Olika livslängder

En medlemsvariabel (deklarerad på modulnivå, utanför någon procedur) har vanligtvis samma livslängd som elementet där den deklareras. En icke-delad variabel som deklareras i en klass eller struktur finns som en separat kopia för varje instans av klassen eller strukturen där den deklareras. Varje sådan variabel har samma livslängd som sin instans. En variabel har dock Shared bara en enda livslängd, som varar under hela tiden som programmet körs.

Det finns bara en lokal variabel (deklarerad i en procedur) medan proceduren som den deklareras körs i. Detta gäller även för den procedurens parametrar och för alla funktionsreturer. Men om den proceduren anropar andra procedurer behåller de lokala variablerna sina värden medan de anropade procedurerna körs.

Livslängdens början

En lokal variabels livslängd börjar när kontrollen anger den procedur som den deklareras i. Varje lokal variabel initieras till standardvärdet för dess datatyp så snart proceduren börjar köras. När proceduren påträffar en Dim instruktion som anger initiala värden, anger den dessa variabler till dessa värden, även om koden redan hade tilldelat andra värden till dem.

Varje medlem i en strukturvariabel initieras som om den vore en separat variabel. På samma sätt initieras varje element i en matrisvariabel individuellt.

Variabler som deklareras inom ett block i en procedur (till exempel en For loop) initieras vid inmatning till proceduren. Dessa initieringar träder i kraft oavsett om koden någonsin kör blocket eller inte.

Livslängdens slut

När en procedur avslutas bevaras inte värdena för dess lokala variabler och Visual Basic återtar sitt minne. Nästa gång du anropar proceduren skapas alla dess lokala variabler på nytt och initieras igen.

När en instans av en klass eller struktur avslutas förlorar dess icke-delade variabler sitt minne och sina värden. Varje ny instans av klassen eller strukturen skapar och initierar om dess icke-delade variabler. Variabler bevaras dock Shared tills programmet slutar köras.

Livslängdstillägg

Om du deklarerar en lokal variabel med nyckelordet Static är dess livslängd längre än körningstiden för proceduren. I följande tabell visas hur procedurdeklarationen avgör hur länge en Static variabel finns.

Procedurplats och delning Livslängden för statisk variabel börjar Livslängden för statisk variabel upphör
I en modul (delas som standard) Första gången proceduren anropas När programmet slutar köras
I en klass ( Shared proceduren är inte en instansmedlem) Första gången proceduren anropas antingen på en specifik instans eller på själva klass- eller strukturnamnet När programmet slutar köras
I en instans av en klass, inte Shared (proceduren är en instansmedlem) Första gången proceduren anropas på den specifika instansen När instansen släpps för skräpinsamling (GC)

Statiska variabler med samma namn

Du kan deklarera statiska variabler med samma namn i mer än en procedur. Om du gör detta anser Visual Basic-kompilatorn att varje sådan variabel är ett separat element. Initieringen av en av dessa variabler påverkar inte de andras värden. Detsamma gäller om du definierar en procedur med en uppsättning överlagringar och deklarerar en statisk variabel med samma namn i varje överlagring.

Innehåller element för statiska variabler

Du kan deklarera en statisk lokal variabel i en klass, det vill säga inuti en procedur i den klassen. Du kan dock inte deklarera en statisk lokal variabel i en struktur, antingen som en strukturmedlem eller som en lokal variabel för en procedur i den strukturen.

Exempel

beskrivning

I följande exempel deklareras en variabel med nyckelordet Statisk . (Observera att du inte behöver nyckelordet Dim när Dim-instruktionenanvänder en modifierare som Static.)

Kod

Function runningTotal(ByVal num As Integer) As Integer
    Static applesSold As Integer
    applesSold = applesSold + num
    Return applesSold
End Function

Kommentarer

I föregående exempel fortsätter variabeln applesSold att finnas när proceduren runningTotal återgår till den anropande koden. Nästa gång runningTotal anropas applesSold behåller det tidigare beräknade värdet.

Om applesSold hade deklarerats utan att använda Staticbevaras inte tidigare ackumulerade värden mellan anrop till runningTotal. Nästa gång runningTotal anropades, applesSold skulle ha återskapats och initierats till 0, och runningTotal skulle helt enkelt ha returnerat samma värde som det anropades med.

Kompilera koden

Du kan initiera värdet för en statisk lokal variabel som en del av deklarationen. Om du deklarerar en matris som Statickan du initiera dess rangordning (antal dimensioner), längden på varje dimension och värdena för de enskilda elementen.

Säkerhet

I föregående exempel kan du skapa samma livslängd genom att applesSold deklarera på modulnivå. Om du har ändrat omfånget för en variabel på det här sättet skulle proceduren dock inte längre ha exklusiv åtkomst till den. Eftersom andra procedurer kan komma åt applesSold och ändra dess värde kan den löpande summan vara otillförlitlig och koden kan vara svårare att underhålla.

Se även