Lebensdauer in Visual BasicLifetime in Visual Basic

Die Lebensdauer eines deklarierten Elements ist den Zeitraum, während die It für die Verwendung verfügbar ist.The lifetime of a declared element is the period of time during which it is available for use. Variablen sind nur Elemente, die deren Lebensdauer.Variables are the only elements that have lifetime. Zu diesem Zweck der Compiler behandelt Prozedurparameter, und Funktionsergebnis ist als spezielle Fälle von Variablen.For this purpose, the compiler treats procedure parameters and function returns as special cases of variables. Die Lebensdauer einer Variablen stellt die Zeitspanne, in dem sie einen Wert enthalten kann.The lifetime of a variable represents the period of time during which it can hold a value. Der Wert kann während seiner Lebensdauer ändern, aber sie enthält immer einen Wert.Its value can change over its lifetime, but it always holds some value.

Unterschiedliche LebensdauerDifferent Lifetimes

Ein Membervariable (auf Modulebene außerhalb einer Prozedur deklariert) in der Regel hat die gleiche Lebensdauer wie das Element in der sie deklariert ist.A member variable (declared at module level, outside any procedure) typically has the same lifetime as the element in which it is declared. Eine nicht freigegebene Variable, die in einer Klasse oder Struktur deklariert ist vorhanden, als eine separate Kopie für jede Instanz der Klasse oder Struktur, die in der sie deklariert ist.A nonshared variable declared in a class or structure exists as a separate copy for each instance of the class or structure in which it is declared. Jede dieser Variablen hat die gleiche Lebensdauer wie die Instanz.Each such variable has the same lifetime as its instance. Allerdings eine Shared Variable hat nur eine Lebensdauer, die für die gesamte Zeit in der Regel dauert die Anwendung ausgeführt wird.However, a Shared variable has only a single lifetime, which lasts for the entire time your application is running.

Ein lokale Variable (innerhalb einer Prozedur deklariert) vorhanden ist, nur während der Ausführung der Prozedur, die in der sie deklariert ist.A local variable (declared inside a procedure) exists only while the procedure in which it is declared is running. Dies gilt auch, um die Parameter der Prozedur und eine Funktion zurück.This applies also to that procedure's parameters and to any function return. Wenn diese Prozedur anderen Prozeduren aufgerufen wird, behalten jedoch die lokalen Variablen ihre Werte während die aufgerufenen Verfahren ausgeführt werden.However, if that procedure calls other procedures, the local variables retain their values while the called procedures are running.

Beginn der LebensdauerBeginning of Lifetime

Lebensdauer einer lokalen Variablen beginnt, wenn es sich bei die Prozedur Eintritte in der sie deklariert ist.A local variable's lifetime begins when control enters the procedure in which it is declared. Jede lokale Variable auf den Standardwert für seinen Datentyp initialisiert wird, sobald das Verfahren beginnt ausgeführt wird.Every local variable is initialized to the default value for its data type as soon as the procedure begins running. Wenn die Prozedur trifft eine Dim Anweisung, die ursprünglichen Werte gibt an, wird dieser Variablen auf die Werte, selbst wenn Ihr Code bereits andere Werte werden zugewiesen hat.When the procedure encounters a Dim statement that specifies initial values, it sets those variables to those values, even if your code had already assigned other values to them.

Jedes Element einer Struktur-Variable wird initialisiert, als handele es sich um eine separate Variable.Each member of a structure variable is initialized as if it were a separate variable. Auf ähnliche Weise wird jedes Element einer Arrayvariablen einzeln initialisiert werden.Similarly, each element of an array variable is initialized individually.

Variablen, die in einem Block innerhalb einer Prozedur deklariert (z. B. eine For Schleife), die beim Einstieg in die Prozedur initialisiert werden.Variables declared within a block inside a procedure (such as a For loop) are initialized on entry to the procedure. Diese Initialisierungen werden wirksam, und zwar unabhängig davon, ob Ihr Code den Block einmal ausgeführt wird.These initializations take effect whether or not your code ever executes the block.

Ende der LebensdauerEnd of Lifetime

Wenn eine Prozedur beendet wird, die Werte der zugehörigen lokalen Variablen werden nicht beibehalten, und Visual Basic gibt ihren Speicher frei.When a procedure terminates, the values of its local variables are not preserved, and Visual Basic reclaims their memory. Beim nächsten der Prozedur aufrufen, alle zugehörigen lokalen Variablen neu erstellt und initialisiert.The next time you call the procedure, all its local variables are created afresh and reinitialized.

Wenn eine Instanz einer Klasse oder Struktur beendet wird, verlieren die nicht freigegebenen Variablen, deren Speicher und ihre Werte.When an instance of a class or structure terminates, its nonshared variables lose their memory and their values. Jede neue Instanz der Klasse oder Struktur erstellt und initialisiert seine nicht freigegebenen Variablen.Each new instance of the class or structure creates and reinitializes its nonshared variables. Allerdings Shared Variablen werden beibehalten, bis die Anwendung beendet wird.However, Shared variables are preserved until your application stops running.

Erweiterung der LebensdauerExtension of Lifetime

Wenn Sie eine lokale Variable mit deklarieren die Static -Schlüsselwort, seine Lebensdauer ist länger als die Ausführungszeit des Verfahrens.If you declare a local variable with the Static keyword, its lifetime is longer than the execution time of its procedure. Die folgende Tabelle zeigt, wie wie lange der Prozedurdeklaration eine Static Variable vorhanden ist.The following table shows how the procedure declaration determines how long a Static variable exists.

Prozedurspeicherort und FreigabeProcedure location and sharing Beginnt die Lebensdauer der statische VariablenStatic variable lifetime begins Die Lebensdauer der statischen Variablen endetStatic variable lifetime ends
In einem Modul (standardmäßig freigegeben)In a module (shared by default) Beim ersten wird die Prozedur aufgerufen.The first time the procedure is called Wenn Ihre Anwendung nicht mehr ausgeführtWhen your application stops running
In einer Klasse Shared (der Prozedur ist nicht auf einen Instanzmember)In a class, Shared (procedure is not an instance member) Beim ersten der Prozedur auf eine bestimmte Instanz oder auf die Klasse oder Struktur aufrufen Namens der SpeichermomentaufnahmeThe first time the procedure is called either on a specific instance or on the class or structure name itself Wenn Ihre Anwendung nicht mehr ausgeführtWhen your application stops running
In einer Instanz einer Klasse nicht Shared (Prozedur ist ein Instanzmember)In an instance of a class, not Shared (procedure is an instance member) Beim ersten wird die Prozedur auf die jeweilige Instanz aufgerufen.The first time the procedure is called on the specific instance Wenn die Instanz für die Garbagecollection (GC) freigegeben wirdWhen the instance is released for garbage collection (GC)

Statische Variablen mit dem gleichen NamenStatic Variables of the Same Name

Sie können statische Variablen mit dem gleichen Namen in mehr als eine Prozedur deklarieren.You can declare static variables with the same name in more than one procedure. Wenn Sie dies tun, berücksichtigt Visual Basic-Compiler jede dieser Variablen, die als separates Element auf.If you do this, the Visual Basic compiler considers each such variable to be a separate element. Die Initialisierung von einer dieser Variablen wirkt sich nicht auf die Werte der anderen aus.The initialization of one of these variables does not affect the values of the others. Dasselbe gilt, wenn Sie eine Prozedur mit einem Satz von Überladungen definieren und deklarieren Sie eine statische Variable mit dem gleichen Namen in jeder Überladung.The same applies if you define a procedure with a set of overloads and declare a static variable with the same name in each overload.

Die Elemente für statische Variablen enthält.Containing Elements for Static Variables

Sie können eine statische lokale Variable innerhalb einer Klasse, d. h. innerhalb einer Prozedur in dieser Klasse deklarieren.You can declare a static local variable within a class, that is, inside a procedure in that class. Sie können nicht jedoch eine statische lokale Variable in einer Struktur als einen Strukturmember oder als lokale Variable einer Prozedur innerhalb dieser Struktur deklarieren.However, you cannot declare a static local variable within a structure, either as a structure member or as a local variable of a procedure within that structure.

BeispielExample

BeschreibungDescription

Das folgende Beispiel deklariert eine Variable mit dem statische Schlüsselwort.The following example declares a variable with the Static keyword. (Beachten Sie, die Sie nicht benötigen die Dim Schlüsselwort bei der Dim-Anweisung verwendet einen Modifizierer, z. B. Static.)(Note that you do not need the Dim keyword when the Dim Statement uses a modifier such as Static.)

CodeCode

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

KommentareComments

Im vorherigen Beispiel, die Variable applesSold bleibt nach dem Verfahren runningTotal an den aufrufenden Code zurückgibt.In the preceding example, the variable applesSold continues to exist after the procedure runningTotal returns to the calling code. Das nächste Mal runningTotal aufgerufen wird, applesSold behält den zuvor berechneten Wert.The next time runningTotal is called, applesSold retains its previously calculated value.

Wenn applesSold deklariert wurde ohne Static, die gesammelten Werte nicht über Aufrufe hinweg beibehalten werden würde runningTotal.If applesSold had been declared without using Static, the previous accumulated values would not be preserved across calls to runningTotal. Das nächste Mal runningTotal aufgerufen wurde, applesSold wird neu erstellt und mit 0 (null) initialisiert wurden und runningTotal einfach zurückgegeben hätte den gleichen Wert, mit denen er aufgerufen wurde.The next time runningTotal was called, applesSold would have been recreated and initialized to 0, and runningTotal would have simply returned the same value with which it was called.

Kompilieren des CodesCompiling the Code

Sie können den Wert einer statischen lokalen Variablen als Teil der Deklaration initialisieren.You can initialize the value of a static local variable as part of its declaration. Wenn Sie ein Array sein deklarieren Static, Sie können sein Rang (Anzahl der Dimensionen), die Länge jeder Dimension, und die Werte der einzelnen Elemente initialisieren.If you declare an array to be Static, you can initialize its rank (number of dimensions), the length of each dimension, and the values of the individual elements.

SicherheitSecurity

Im vorherigen Beispiel können Sie die gleiche Lebensdauer erzeugen, indem deklarieren applesSold auf Modulebene.In the preceding example, you can produce the same lifetime by declaring applesSold at module level. Wenn Sie den Bereich einer Variablen auf diese Weise geändert, jedoch müsste die Prozedur nicht mehr exklusiven Zugriff darauf.If you changed the scope of a variable this way, however, the procedure would no longer have exclusive access to it. Da andere Prozeduren zugegriffen werden konnte applesSold und ändern Sie seinen Wert, die laufende Summe ist möglicherweise unzuverlässig und der Code möglicherweise schwieriger zu warten.Because other procedures could access applesSold and change its value, the running total could be unreliable and the code could be more difficult to maintain.

Siehe auchSee also