How to: Lengthen a Variable's Lifetime
Normally, a variable ceases to exist when the programming element in which it is declared ceases to exist. However, you can make its lifetime longer than that of its containing element by declaring it with the Static (Visual Basic) keyword.
For more information, see Lifetime in Visual Basic.
To make a variable live longer than its containing element
If the variable is a local variable (declared inside a procedure), include the Static keyword in the Dim Statement (Visual Basic) that declares it. A static variable exists as long as the class or module containing the procedure that declares the variable.
If a local variable is inside a Shared (Visual Basic) procedure, the procedure and its variables exist as long as your application runs. Do not use Static in this case.
If the variable is a member variable (declared in a class or structure, outside any procedure), include the Shared keyword in the Dim statement that declares it. A shared variable is not associated with any one instance of its class or structure, and it exists as long as your application runs. You cannot use Static on a member variable.
If a member variable is declared in a module, it always exists as long as your application runs. Do not use Shared in this case.
Example
The following example declares a variable with the Static (Visual Basic) keyword. (Note that you do not need the Dim keyword when the Dim Statement (Visual Basic) uses a modifier such as Static.)
Function runningTotal(ByVal num As Integer) As Integer
Static applesSold As Integer
applesSold = applesSold + num
Return applesSold
End Function
In the preceding example, the variable applesSold
continues to exist after the procedure runningTotal
returns to the calling code. The next time runningTotal
is called, applesSold
retains its previously calculated value.
If applesSold
had been declared without using Static, the previous accumulated values would not be preserved across calls to runningTotal
. 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.
Compiling the Code
You can initialize the value of a static local variable as part of its declaration. 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.
Static Variables of the Same Name
You can declare static variables with the same name in more than one procedure. If you do this, the Visual Basic compiler considers each such variable to be a separate element. The initialization of one of these variables does not affect the values of the others. 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.
Containing Elements for Static Variables
You can declare a static local variable within a class, that is, inside a procedure in that class. 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.
Security
In the preceding example, you can produce the same lifetime by declaring applesSold
at module level. If you changed the scope of a variable this way, however, the procedure would no longer have exclusive access to it. 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.
See Also
Concepts
Lifetime in Visual Basic
Declared Element Characteristics
Scope in Visual Basic
Access Levels in Visual Basic
Variables in Visual Basic
Variable Declaration in Visual Basic
Procedure Overloading