Partager via


Durée de vie en Visual Basic

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.

Voir aussi