Notes
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
La durée de vie d’un élément déclaré est la période pendant laquelle il est disponible pour une utilisation. Les variables sont les seuls éléments qui ont une durée de vie. À cet effet, le compilateur traite les paramètres de procédure et la fonction retourne comme des cas spéciaux de variables. La durée de vie d’une variable représente la période pendant laquelle elle peut contenir une valeur. Sa valeur peut changer pendant sa durée de vie, mais elle contient toujours une valeur.
Durées de vie différentes
Une variable membre (déclarée au niveau du module, en dehors de toute procédure) a généralement la même durée de vie que l’élément dans lequel il est déclaré. Une variable non partagé déclarée dans une classe ou une structure existe en tant que copie distincte pour chaque instance de la classe ou de la structure dans laquelle elle est déclarée. Chaque variable de ce type a la même durée de vie que son instance. Toutefois, une Shared
variable n’a qu’une seule durée de vie, qui dure pendant toute la durée d’exécution de votre application.
Une variable locale (déclarée à l’intérieur d’une procédure) existe uniquement pendant l’exécution de la procédure dans laquelle elle est déclarée. Cela s’applique également aux paramètres de cette procédure et à tout retour de fonction. Toutefois, si cette procédure appelle d’autres procédures, les variables locales conservent leurs valeurs pendant l’exécution des procédures appelées.
Début de la durée de vie
La durée de vie d’une variable locale commence lorsque le contrôle entre dans la procédure dans laquelle elle est déclarée. Chaque variable locale est initialisée à la valeur par défaut de son type de données dès que la procédure commence à s’exécuter. Lorsque la procédure rencontre une Dim
instruction qui spécifie des valeurs initiales, elle définit ces variables sur ces valeurs, même si votre code leur avait déjà attribué d’autres valeurs.
Chaque membre d’une variable de structure est initialisé comme s’il s’agissait d’une variable distincte. De même, chaque élément d’une variable de tableau est initialisé individuellement.
Les variables déclarées dans un bloc à l’intérieur d’une procédure (par exemple, une For
boucle) sont initialisées lors de l’entrée dans la procédure. Ces initialisations prennent effet si votre code exécute jamais le bloc.
Fin de la durée de vie
Lorsqu’une procédure se termine, les valeurs de ses variables locales ne sont pas conservées et Visual Basic récupère leur mémoire. La prochaine fois que vous appelez la procédure, toutes ses variables locales sont créées à nouveau et réinitialisées.
Lorsqu’une instance d’une classe ou d’une structure se termine, ses variables non partagés perdent leur mémoire et leurs valeurs. Chaque nouvelle instance de la classe ou de la structure crée et réinitialise ses variables non partagés. Toutefois, Shared
les variables sont conservées jusqu’à ce que votre application cesse de s’exécuter.
Extension de la durée de vie
Si vous déclarez une variable locale avec le Static
mot clé, sa durée de vie est supérieure à la durée d’exécution de sa procédure. Le tableau suivant montre comment la déclaration de procédure détermine la durée d’existence d’une Static
variable.
Emplacement et partage de procédure | La durée de vie des variables statiques commence | La durée de vie des variables statiques se termine |
---|---|---|
Dans un module (partagé par défaut) | La première fois que la procédure est appelée | Quand votre application cesse d’être en cours d’exécution |
Dans une classe, Shared (la procédure n’est pas un membre d’instance) |
La première fois que la procédure est appelée sur une instance spécifique ou sur la classe ou le nom de structure lui-même | Quand votre application cesse d’être en cours d’exécution |
Dans une instance d’une classe, et non Shared (la procédure est un membre d’instance) |
La première fois que la procédure est appelée sur l’instance spécifique | Lorsque l’instance est publiée pour le garbage collection (GC) |
Variables statiques du même nom
Vous pouvez déclarer des variables statiques portant le même nom dans plusieurs procédures. Si vous effectuez cette opération, le compilateur Visual Basic considère chaque variable comme un élément distinct. L’initialisation de l’une de ces variables n’affecte pas les valeurs des autres. La même chose s’applique si vous définissez une procédure avec un ensemble de surcharges et déclarez une variable statique portant le même nom dans chaque surcharge.
Contenant des éléments pour les variables statiques
Vous pouvez déclarer une variable locale statique au sein d’une classe, c’est-à-dire à l’intérieur d’une procédure dans cette classe. Toutefois, vous ne pouvez pas déclarer une variable locale statique au sein d’une structure, en tant que membre de structure ou en tant que variable locale d’une procédure dans cette structure.
Exemple :
Descriptif
L’exemple suivant déclare une variable avec le mot clé Static . (Notez que vous n’avez pas besoin du Dim
mot clé lorsque l’instruction Dim utilise un modificateur tel que Static
.)
Code
Function runningTotal(ByVal num As Integer) As Integer
Static applesSold As Integer
applesSold = applesSold + num
Return applesSold
End Function
Commentaires
Dans l’exemple précédent, la variable applesSold
continue d’exister après le retour de la procédure runningTotal
au code appelant. La prochaine fois runningTotal
, applesSold
elle conserve sa valeur calculée précédemment.
Si applesSold
elle avait été déclarée sans utilisation Static
, les valeurs cumulées précédentes ne seraient pas conservées entre les appels à runningTotal
. La prochaine fois runningTotal
qu’elle a été appelée, applesSold
aurait été recréée et initialisée à 0, et runningTotal
aurait simplement retourné la même valeur avec laquelle elle a été appelée.
Compiler le code
Vous pouvez initialiser la valeur d’une variable locale statique dans le cadre de sa déclaration. Si vous déclarez un tableau à Static
être, vous pouvez initialiser son classement (nombre de dimensions), la longueur de chaque dimension et les valeurs des éléments individuels.
Sécurité
Dans l’exemple précédent, vous pouvez produire la même durée de vie en déclarant applesSold
au niveau du module. Si vous avez modifié l’étendue d’une variable de cette façon, toutefois, la procédure n’aurait plus d’accès exclusif à celle-ci. Étant donné que d’autres procédures peuvent accéder applesSold
et modifier sa valeur, le total en cours d’exécution peut être peu fiable et le code peut être plus difficile à gérer.