Comment : masquer une variable portant le même nom que votre variable (Visual Basic)
Vous pouvez masquer une variable en la mettant en ombre, c’est-à-dire en la redéfinissant avec une variable du même nom. Vous pouvez masquer la variable que vous souhaitez masquer de deux manières :
L'observation à travers le champ d'application. Vous pouvez l’ombrer à travers l’étendue en le redéclarant à l’intérieur d’une sous-région de la région contenant la variable que vous souhaitez masquer.
Ombrage via l’héritage. Si la variable que vous souhaitez masquer est définie au niveau de la classe, vous pouvez la masquer via l’héritage en la redéclarant avec les ombres mot clé dans une classe dérivée.
Deux façons de masquer une variable
Pour masquer une variable en la faisant passer dans le champ d'application
Déterminez la région définissant la variable à masquer et déterminez une sous-région dans laquelle la redéfinir avec votre variable.
Région de la variable Sous-région autorisée pour la redéfinition Module Classe dans le module Classe Une sous-classe de la classe
Une procédure au sein de la classeVous ne pouvez pas redéfinir une variable de procédure dans un bloc de cette procédure, par exemple dans une
If
...End If
construction ou uneFor
boucle.Créer la sous-région si elle n'existe pas encore.
Dans la sous-région, écrivez une déclaration Dim déclarant la variable d'observation.
Lorsque le code à l’intérieur de la sous-région fait référence au nom de la variable, le compilateur résout la référence à la variable d’ombre.
L’exemple suivant illustre l’ombre à travers l’étendue, ainsi qu’une référence qui contourne l’ombre.
Module shadowByScope ' The following statement declares num as a module-level variable. Public num As Integer Sub show() ' The following statement declares num as a local variable. Dim num As Integer ' The following statement sets the value of the local variable. num = 2 ' The following statement displays the module-level variable. MsgBox(CStr(shadowByScope.num)) End Sub Sub useModuleLevelNum() ' The following statement sets the value of the module-level variable. num = 1 show() End Sub End Module
L'exemple précédent déclare la variable
num
à la fois au niveau du module et au niveau de la procédure (dans la procédureshow
). La variablenum
locale ombrage la variablenum
de niveau module dansshow
, de sorte que la variable locale est définie sur 2. Toutefois, il n’existe aucune variable locale à masquernum
dans lauseModuleLevelNum
procédure. Par conséquent,useModuleLevelNum
définit la valeur de la variable de niveau module sur 1.L'
MsgBox
appel à l'intérieurshow
contourne le mécanisme de filtrage en se qualifiantnum
avec le nom du module. Par conséquent, il affiche la variable de niveau module au lieu de la variable locale.
Pour masquer une variable en la faisant passer dans le champ d'application
Assurez-vous que la variable à masquer est déclarée dans une classe et au niveau de la classe (en dehors de toute procédure). Sinon, vous ne pouvez pas l’ombrer via l’héritage.
Définir une classe dérivée de la classe de la variable s'il n'en existe pas déjà une.
Dans la classe dérivée, écrivez une
Dim
instruction déclarant votre variable. Incluez les mot clé Shadows dans la déclaration.Lorsque le code de la classe dérivée fait référence au nom de la variable, le compilateur résout la référence à votre variable.
L’exemple suivant illustre l’ombre par héritage. Il effectue deux références, l’une qui accède à la variable d’ombre et l’autre qui contourne l’ombre.
Public Class shadowBaseClass Public shadowString As String = "This is the base class string." End Class Public Class shadowDerivedClass Inherits shadowBaseClass Public Shadows shadowString As String = "This is the derived class string." Public Sub showStrings() Dim s As String = "Unqualified shadowString: " & shadowString & vbCrLf & "MyBase.shadowString: " & MyBase.shadowString MsgBox(s) End Sub End Class
L'exemple précédent déclare la variable
shadowString
dans la classe de base et l'ombrage dans la classe dérivée. La procédureshowStrings
de la classe dérivée affiche la version de shadowing de la chaîne lorsque le nomshadowString
n’est pas qualifié. Il affiche ensuite la version ombrée lorsqueshadowString
est qualifié avec le mot-cléMyBase
.
Programmation fiable
Le shadowing introduit plusieurs versions d’une variable portant le même nom. Lorsqu’une instruction de code fait référence au nom de la variable, la version à laquelle le compilateur résout la référence dépend de facteurs tels que l’emplacement de l’instruction de code et la présence d’une chaîne éligible. Cela peut augmenter le risque de faire référence à une version involontaire d’une variable ombrée. Vous pouvez réduire ce risque en éligible entièrement toutes les références à une variable ombrée.