Note
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier les répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de changer de répertoire.
Vous pouvez masquer une variable en l’ombrant , c’est-à-dire en la redéfinissant avec une variable du même nom. Vous pouvez masquer la variable de deux façons :
Masquage par étendue. Vous pouvez masquer par l'étendue en la re-déclarant à l’intérieur d’une sous-région de la région contenant la variable que vous souhaitez masquer.
Masquage par héritage. Si la variable que vous souhaitez masquer est définie au niveau de la classe, vous pouvez l’ombrer par héritage en la déclarant avec le mot clé Shadows dans une classe dérivée.
Deux façons de masquer une variable
Pour masquer une variable par masquage par l’étendue
Déterminez la région qui définit la variable que vous souhaitez 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éfinir Module Classe au sein du module classe Sous-classe dans la classe
Procédure au sein de la classeVous ne pouvez pas redéfinir une variable de procédure dans un bloc au sein de cette même procédure, par exemple dans une construction
If...End Ifou une boucleFor.Créez la sous-région s’il n’existe pas déjà.
Dans la sous-région, écrivez une déclaration Dim déclarant la variable d’ombre.
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 le masquage par l'étendue, ainsi qu'une référence qui contourne le masquage.
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 ModuleL’exemple précédent déclare la variable
numau niveau du module et au niveau de la procédure (dans la procédureshow). La variablenumlocale ombre la variablenumau niveau du module dansshow, de sorte que la variable locale est définie sur 2. Toutefois, il n’existe aucune variable locale à ombrernumdans lauseModuleLevelNumprocédure. Par conséquent,useModuleLevelNumdéfinit la valeur de la variable au niveau du module sur 1.L'appel
MsgBoxà l'intérieurshowcontourne le mécanisme de masquage en qualifiantnumavec le nom du module. Par conséquent, elle affiche la variable au niveau du module au lieu de la variable locale.
Pour masquer une variable en la masquant par héritage
Vérifiez que la variable que vous souhaitez 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 la masquer par héritage.
Définissez une classe dérivée de la classe de la variable si elle n’existe pas déjà.
À l’intérieur de la classe dérivée, écrivez une
Diminstruction déclarant votre variable. Incluez le 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 le masquage par héritage. Cela fait deux références, une qui accède à la variable de masquage et une qui contourne le masquage.
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 ClassL’exemple précédent déclare la variable
shadowStringdans la classe de base et l’ombre dans la classe dérivée. La procédureshowStringsde la classe dérivée affiche la version d’ombre de la chaîne lorsque le nomshadowStringn’est pas qualifié. Il affiche ensuite la version ombrée lorsqu’elleshadowStringest qualifiée avec leMyBasemot clé.
Programmation robuste
L’ombre 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 qualifiant entièrement toutes les références à une variable masquée.
Voir aussi
- Références aux éléments déclarés
- Ombre dans Visual Basic
- Différences entre le masquage et le remplacement
- Guide pratique pour masquer une variable héritée
- Guide pratique pour accéder à une variable masquée par une classe dérivée
- Remplacements
- Moi, My, MyBase et MyClass
- Principes de base de l’héritage