Megosztás a következőn keresztül:


Élettartam a Visual Basicben

A deklarált elem élettartama az az időtartam, amely alatt felhasználható. A változók az egyetlen olyan elem, amely élettartamával rendelkezik. Ebből a célból a fordító az eljárásparamétereket és a függvényeket a változók különleges eseteiként kezeli. A változó élettartama azt az időtartamot jelöli, amely alatt az érték tárolható. Az értéke az élettartama során változhat, de mindig tartalmaz valamilyen értéket.

Különböző élettartamok

A tagváltozók (modulszinten deklarálva, bármely eljáráson kívül) általában ugyanazt az élettartamot használják, mint a deklarált elem. Egy osztályban vagy struktúrában deklarált nem tagolt változó külön példányként létezik annak az osztálynak vagy struktúrának minden példányához, amelyben deklarálva van. Minden ilyen változó élettartama megegyezik a példányával. Egy Shared változónak azonban csak egyetlen élettartama van, amely az alkalmazás teljes futási idejéig tart.

Egy helyi változó (egy eljáráson belül deklarálva) csak akkor létezik, ha a deklarált eljárás fut. Ez az eljárás paramétereire és a függvény visszatérésére is vonatkozik. Ha azonban az eljárás más eljárásokat hív meg, a helyi változók megtartják az értékeiket, amíg a hívott eljárások futnak.

Élettartam kezdete

A helyi változó élettartama akkor kezdődik, amikor a vezérlőelem belép a deklarált eljárásba. Minden helyi változó inicializálva lesz az adattípus alapértelmezett értékére, amint az eljárás elkezd futni. Amikor az eljárás egy Dim kezdeti értékeket meghatározó utasítással találkozik, ezeket a változókat ezekre az értékekre állítja, még akkor is, ha a kód már más értékeket rendelt hozzájuk.

A struktúraváltozó minden tagja inicializálva van, mintha külön változó lenne. Hasonlóképpen, a tömbváltozó minden eleme inicializálódik egyenként.

Az eljáráson belüli blokkokban (például For hurokban) deklarált változók inicializálva lesznek az eljárásba való belépéskor. Ezek az inicializálások érvénybe lépnek, függetlenül attól, hogy a kód végrehajtja-e a blokkot.

Élettartam vége

Amikor egy eljárás leáll, a helyi változók értékei nem maradnak meg, és a Visual Basic visszanyeri a memóriájukat. Amikor legközelebb meghívja az eljárást, az összes helyi változója újra létrejön, és újraindul.

Amikor egy osztály vagy struktúra egy példánya leáll, a nem tagolt változók elveszítik a memóriájukat és az értékeiket. Az osztály vagy struktúra minden új példánya létrehozza és újrainicializálja a nem tagolt változókat. A változók azonban mindaddig megmaradnak, Shared amíg az alkalmazás nem fut.

Élettartam meghosszabbítása

Ha egy helyi változót deklarál a Static kulcsszóval, annak élettartama hosszabb, mint az eljárás végrehajtási ideje. Az alábbi táblázat bemutatja, hogyan határozza meg az eljárásdeklaráció, hogy mennyi ideig létezik egy Static változó.

Eljárás helye és megosztása A statikus változó élettartama megkezdődik Statikus változó élettartamának vége
Modulban (alapértelmezés szerint megosztva) Az eljárás első meghívása Amikor az alkalmazás nem fut
Osztályban Shared (az eljárás nem példánytag) Az eljárás első meghívása egy adott példányon, vagy magában az osztály- vagy struktúranévben Amikor az alkalmazás nem fut
Egy osztály egy példányában nem Shared (az eljárás egy példány tagja) Az eljárás első meghívása az adott példányon A példány szemétgyűjtéshez (GC) való kiadásakor

Azonos nevű statikus változók

Több eljárásban is deklarálhat azonos nevű statikus változókat. Ha ezt teszi, a Visual Basic fordító minden ilyen változót külön elemnek tekint. Az egyik változó inicializálása nem befolyásolja a többi értékeket. Ugyanez vonatkozik arra az esetre, ha túlterhelések halmazával definiál egy eljárást, és minden túlterhelésben azonos nevű statikus változót deklarál.

Statikus változók elemeit tartalmazza

Egy statikus helyi változót deklarálhat egy osztályon belül, vagyis az osztály egy eljárásán belül. Azonban nem deklarálhat statikus helyi változót egy struktúrán belül, sem struktúratagként, sem az adott struktúrán belüli eljárás helyi változójaként.

Példa

Leírás

Az alábbi példa egy statikus kulcsszóval rendelkező változót deklarál. (Vegye figyelembe, hogy nincs szüksége a Dim kulcsszóra, ha a Dim utasítás módosítót használ, például Static.)

Kód

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

Megjegyzések

Az előző példában a változó applesSold továbbra is létezik, miután az eljárás runningTotal visszatér a hívó kódhoz. A következő alkalommal runningTotal a rendszer applesSold megtartja a korábban kiszámított értékét.

Ha applesSold használat Staticnélkül lett volna deklarálva, akkor az előző halmozott értékek nem maradnának meg a hívásban runningTotal. A következő híváskor runningTotal újra létre lett volna hozva és applesSold 0-ra inicializálva lett volna, és runningTotal egyszerűen visszaadta volna ugyanazt az értéket, amellyel meghívták.

A kód fordítása

A statikus helyi változó értékét inicializálhatja a deklaráció részeként. Ha tömböt Staticdeklarál, inicializálhatja annak rangját (dimenziók számát), az egyes dimenziók hosszát és az egyes elemek értékeit.

Biztonság

Az előző példában ugyanazt az élettartamot a modul szintjén deklarálva applesSold állíthatja elő. Ha azonban így módosította egy változó hatókörét, az eljárás már nem rendelkezik kizárólagos hozzáféréssel. Mivel más eljárások hozzáférhetnek applesSold és módosíthatják az értékét, a futó összeg megbízhatatlan lehet, és a kód karbantartása nehezebb lehet.

Lásd még