Okres istnienia w Visual Basic

Okres istnienia zadeklarowanego elementu to okres, w którym jest dostępny do użycia. Zmienne to jedyne elementy, które mają okres istnienia. W tym celu kompilator traktuje parametry procedury i funkcję zwracaną jako specjalne przypadki zmiennych. Okres istnienia zmiennej reprezentuje okres, w którym może przechowywać wartość. Jego wartość może ulec zmianie w okresie istnienia, ale zawsze zawiera pewną wartość.

Różne okresy istnienia

Zmienna składowa (zadeklarowana na poziomie modułu, poza dowolną procedurą) zwykle ma ten sam okres istnienia co element, w którym jest zadeklarowany. Zmienna nieudostępna zadeklarowana w klasie lub strukturze istnieje jako oddzielna kopia dla każdego wystąpienia klasy lub struktury, w której jest zadeklarowana. Każda taka zmienna ma taki sam okres istnienia jak jego wystąpienie. Jednak zmienna Shared ma tylko jeden okres istnienia, który trwa przez cały czas działania aplikacji.

Zmienna lokalna (zadeklarowana wewnątrz procedury) istnieje tylko wtedy, gdy procedura, w której jest zadeklarowana, jest uruchomiona. Dotyczy to również parametrów tej procedury i wszystkich zwracanych funkcji. Jeśli jednak ta procedura wywołuje inne procedury, zmienne lokalne zachowują swoje wartości, gdy są uruchomione wywoływane procedury.

Początek okresu istnienia

Okres istnienia zmiennej lokalnej rozpoczyna się, gdy kontrolka wprowadza procedurę, w której jest zadeklarowana. Każda zmienna lokalna jest inicjowana do wartości domyślnej dla jej typu danych, gdy tylko procedura zacznie działać. Gdy procedura napotka instrukcję określającą Dim wartości początkowe, ustawia te zmienne na te wartości, nawet jeśli kod już przypisał do nich inne wartości.

Każdy element członkowski zmiennej struktury jest inicjowany tak, jakby był oddzielną zmienną. Podobnie każdy element zmiennej tablicowej jest inicjowany indywidualnie.

Zmienne zadeklarowane w bloku wewnątrz procedury (takiej jak pętla For ) są inicjowane we wpisie do procedury. Te inicjacje mają wpływ na to, czy kod kiedykolwiek wykonuje blok.

Koniec okresu istnienia

Po zakończeniu procedury wartości zmiennych lokalnych nie są zachowywane, a program Visual Basic odzyskuje pamięć. Przy następnym wywołaniu procedury wszystkie jej zmienne lokalne są tworzone na nowo i ponownie zainicjowane.

Gdy wystąpienie klasy lub struktury zakończy się, jego zmienne nieudostępne tracą pamięć i ich wartości. Każde nowe wystąpienie klasy lub struktury tworzy i ponownie inicjuje zmienne nieudostępne. Shared Jednak zmienne są zachowywane do momentu, aż aplikacja przestanie działać.

Przedłużenie okresu istnienia

Jeśli zadeklarujesz zmienną lokalną za pomocą słowa kluczowego Static , jego okres istnienia jest dłuższy niż czas wykonywania jego procedury. W poniższej tabeli pokazano, jak deklaracja procedury określa, jak długo istnieje zmienna Static .

Lokalizacja procedury i udostępnianie Rozpoczyna się okres istnienia zmiennej statycznej Zakończenie okresu istnienia zmiennej statycznej
W module (udostępnionym domyślnie) Przy pierwszym wywołaniu procedury Gdy aplikacja przestanie działać
W klasie Shared (procedura nie jest elementem członkowskim wystąpienia) Przy pierwszym wywołaniu procedury w konkretnym wystąpieniu lub samej nazwie klasy lub struktury Gdy aplikacja przestanie działać
W wystąpieniu klasy, a nie Shared (procedura jest elementem członkowskim wystąpienia) Przy pierwszym wywołaniu procedury w konkretnym wystąpieniu Po wydaniu wystąpienia do odzyskiwania pamięci (GC)

Zmienne statyczne o tej samej nazwie

Zmienne statyczne można zadeklarować pod tą samą nazwą w więcej niż jednej procedurze. Jeśli to zrobisz, kompilator języka Visual Basic uzna każdą taką zmienną za oddzielny element. Inicjowanie jednej z tych zmiennych nie ma wpływu na wartości innych. To samo dotyczy definiowania procedury z zestawem przeciążeń i deklarowania zmiennej statycznej o tej samej nazwie w każdym przeciążeniu.

Zawieranie elementów dla zmiennych statycznych

Możesz zadeklarować statyczną zmienną lokalną w klasie, czyli wewnątrz procedury w tej klasie. Nie można jednak zadeklarować statycznej zmiennej lokalnej w strukturze jako składowej struktury lub jako lokalnej zmiennej procedury w ramach tej struktury.

Przykład

opis

W poniższym przykładzie zadeklarowana jest zmienna ze słowem kluczowym Static . (Pamiętaj, że nie potrzebujesz słowa kluczowego Dim , gdy instrukcja Dim używa modyfikatora, takiego jak Static.)

Kod

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

Komentarze

W poprzednim przykładzie zmienna applesSold nadal istnieje po powrocie procedury runningTotal do kodu wywołującego. Przy następnym wywołaniu runningTotalapplesSold funkcja zachowuje wcześniej obliczoną wartość.

Jeśli applesSold zostały zadeklarowane bez użycia Staticmetody , poprzednie skumulowane wartości nie zostaną zachowane między wywołaniami metody runningTotal. Przy następnym wywołaniu runningTotalapplesSold funkcja zostałaby ponownie utworzona i zainicjowana do wartości 0 i runningTotal zostałaby po prostu zwrócona ta sama wartość, z którą została wywołana.

Kompilowanie kodu

Można zainicjować wartość statycznej zmiennej lokalnej w ramach jej deklaracji. W przypadku deklarowania tablicy jako Static, można zainicjować jej rangę (liczbę wymiarów), długość każdego wymiaru i wartości poszczególnych elementów.

Zabezpieczenia

W poprzednim przykładzie można utworzyć ten sam okres istnienia, deklarując applesSold na poziomie modułu. Jeśli jednak zmienisz zakres zmiennej w ten sposób, procedura nie będzie już miała wyłącznego dostępu do tej zmiennej. Ponieważ inne procedury mogą uzyskać dostęp do applesSold jego wartości i zmienić jej wartość, suma bieżąca może być zawodna, a kod może być trudniejszy do utrzymania.

Zobacz też