Doba platnosti v jazyce Visual Basic

Životnost deklarovaného prvku je časové období, během kterého je k dispozici pro použití. Proměnné jsou jediné prvky, které mají životnost. Za tímto účelem kompilátor zpracovává parametry procedury a funkce jako speciální případy proměnných. Životnost proměnné představuje časové období, během kterého může obsahovat hodnotu. Jeho hodnota se může během své životnosti změnit, ale vždy obsahuje určitou hodnotu.

Různé životnosti

Členová proměnná (deklarovaná na úrovni modulu, mimo jakoukoli proceduru) má obvykle stejnou životnost jako prvek, ve kterém je deklarován. Nesdílená proměnná deklarovaná ve třídě nebo struktuře existuje jako samostatná kopie pro každou instanci třídy nebo struktury, ve které je deklarována. Každá taková proměnná má stejnou životnost jako její instance. Proměnná Shared ale má pouze jednu životnost, která trvá celou dobu, kdy je vaše aplikace spuštěná.

Místní proměnná (deklarovaná uvnitř procedury) existuje pouze v době, kdy je procedura, ve které je deklarována, spuštěna. To platí také pro parametry tohoto postupu a pro všechny vrácení funkce. Pokud však tento postup volá jiné procedury, místní proměnné si zachovají své hodnoty, zatímco volané procedury jsou spuštěny.

Začátek životnosti

Životnost místní proměnné začíná, když ovládací prvek zadá proceduru, ve které je deklarována. Každá místní proměnná se inicializuje na výchozí hodnotu svého datového typu, jakmile procedura začne běžet. Když procedura narazí na Dim příkaz, který určuje počáteční hodnoty, nastaví tyto proměnné na tyto hodnoty, i když váš kód již přiřadil jiné hodnoty.

Každý člen proměnné struktury se inicializuje, jako by šlo o samostatnou proměnnou. Podobně je každý prvek proměnné pole inicializován jednotlivě.

Proměnné deklarované v bloku uvnitř procedury (například For smyčky) se inicializují při vstupu do procedury. Tato inicializace se projeví bez ohledu na to, jestli váš kód někdy spustí blok.

Konec životnosti

Když se procedura ukončí, hodnoty místních proměnných se nezachovají a Visual Basic uvolní paměť. Při příštím volání procedury se vytvoří všechny místní proměnné afresh a znovu inicializují.

Když instance třídy nebo struktury skončí, její nesdílené proměnné ztratí svou paměť a jejich hodnoty. Každá nová instance třídy nebo struktury vytvoří a znovu inicializuje své nesdílené proměnné. Proměnné se však zachovají, Shared dokud se aplikace neskončí.

Prodloužení životnosti

Pokud deklarujete místní proměnnou s klíčovým slovem Static , její životnost je delší než doba provádění jejího postupu. Následující tabulka ukazuje, jak deklarace procedury určuje, jak dlouho proměnná Static existuje.

Umístění a sdílení procedury Začíná životnost statických proměnných. Konec životnosti statické proměnné
V modulu (ve výchozím nastavení sdílené) Při prvním volání procedury Když aplikace přestane běžet
Ve třídě Shared (procedura není členem instance) Při prvním volání procedury buď v konkrétní instanci, nebo v samotném názvu třídy nebo struktury Když aplikace přestane běžet
V instanci třídy ne Shared (procedura je členem instance) Při prvním volání procedury pro konkrétní instanci Při uvolnění instance pro uvolňování paměti (GC)

Statické proměnné se stejným názvem

Statické proměnné můžete deklarovat se stejným názvem ve více než jednom postupu. Pokud to uděláte, kompilátor jazyka Visual Basic považuje každou takovou proměnnou za samostatný prvek. Inicializace jedné z těchto proměnných nemá vliv na hodnoty ostatních. Totéž platí, pokud definujete proceduru se sadou přetížení a deklarujete statickou proměnnou se stejným názvem v každém přetížení.

Obsahující prvky pro statické proměnné

Můžete deklarovat statickou místní proměnnou v rámci třídy, tj. uvnitř procedury v této třídě. Nemůžete však deklarovat statickou místní proměnnou v rámci struktury, a to buď jako člen struktury, nebo jako místní proměnnou procedury v rámci této struktury.

Příklad

Popis

Následující příklad deklaruje proměnnou s klíčovým slovem Static . (Všimněte si, že nepotřebujete Dim klíčové slovo, pokud příkaz Dim používá modifikátor, například Static.)

Kód

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

Komentáře

V předchozím příkladu proměnná applesSold nadále existuje poté, co se procedura runningTotal vrátí do volajícího kódu. Při příštím runningTotal zavolání applesSold se zachová jeho dříve vypočítaná hodnota.

Pokud applesSold by byly deklarovány bez použití Static, předchozí kumulované hodnoty by nebyly zachovány napříč voláními runningTotal. Při příštím runningTotal zavolání applesSold se znovu vytvoří a inicializuje na hodnotu 0 a runningTotal jednoduše se vrátí stejná hodnota, s jakou byla volána.

Kompilace kódu

Hodnotu statické místní proměnné můžete inicializovat jako součást deklarace. Pokud deklarujete pole, které má být Static, můžete inicializovat jeho pořadí (počet dimenzí), délku jednotlivých dimenzí a hodnoty jednotlivých prvků.

Zabezpečení

V předchozím příkladu můžete vytvořit stejnou životnost deklarací applesSold na úrovni modulu. Pokud jste tímto způsobem změnili rozsah proměnné, nebude mít k ní už žádný výhradní přístup. Vzhledem k tomu, že ostatní postupy můžou přistupovat k applesSold hodnotě a měnit její hodnotu, může být průběžný součet nespolehlivý a kód by mohl být obtížnější udržovat.

Viz také