Comment : masquer une variable portant le même nom que votre variable (Visual Basic)
Vous pouvez masquer une variable en l'occultant, c'est-à-dire en la redéfinissant avec une variable du même nom. Vous pouvez occulter la variable à masquer de deux manières :
Occultation par l'intermédiaire de la portée. Vous pouvez l'occulter par l'intermédiaire de la portée en la redéclarant dans une sous-région de la région contenant la variable à masquer.
Occultation par héritage. Si la variable à masquer est définie au niveau de la classe, vous pouvez l'occulter par l'intermédiaire de l'héritage en la rédeclarant avec le mot clé Shadows (Visual Basic) dans une classe dérivée.
Deux manières de masquer une variable
Pour masquer une variable en l'occultant par l'intermédiaire de la portée
Déterminez la région qui définit la variable à masquer et déterminez une sous-région dans laquelle la redéfinir avec votre variable.
Région de variable
Sous-région autorisée pour la redéfinir
Module
Classe dans le module
Classe
Sous-classe dans la classe
Procédure dans la classe
Vous ne pouvez pas redéfinir de variable de procédure dans un bloc au sein de cette procédure, par exemple dans une construction If...End If ou une boucle For.
Créez la sous-région si elle n'existe pas déjà.
Dans la sous-région, écrivez à une Dim, instruction (Visual Basic) qui déclare la variable occultante.
Lorsque le code à l'intérieur de la sous-région fait référence au nom de variable, le compilateur résout la référence à la variable occultante.
L'exemple suivant illustre l'occultation par l'intermédiaire de la portée, ainsi qu'une référence qui outrepasse l'occultation.
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édure show). La variable locale num occulte la variable de niveau module num dans show ; par conséquent, la variable locale a la valeur 2. Toutefois, il n'existe aucune variable locale pour occulter num dans la procédure useModuleLevelNum. Par conséquent, useModuleLevelNum définit la valeur de la variable au niveau du module à 1.
L'appel MsgBox à l'intérieur de show outrepasse le mécanisme d'occultation en qualifiant num avec le nom du module. Par conséquent, il affiche la variable au niveau du module au lieu de la variable locale.
Pour masquer une variable en l'occultant par l'intermédiaire de l'héritage
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'occulter par héritage.
Définissez une classe dérivée de la classe de la variable s'il n'en n'existe pas déjà une.
À l'intérieur de la classe dérivée, écrivez une instruction Dim qui déclare votre variable. Incluez le mot clé Shadows (Visual Basic) 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'occultation par l'intermédiaire de l'héritage. Il effectue deux références, une qui accède à la variable occultante et une qui outrepasse l'occultation.
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 la masque dans la classe dérivée. La procédure showStrings dans la classe dérivée affiche la version occultante de la chaîne lorsque le nom shadowString n'est pas qualifié. Elle affiche ensuite la version occultée lorsque shadowString est qualifié avec le mot clé MyBase.
Programmation fiable
L'occultation introduit plusieurs versions d'une variable avec le même nom. Lorsqu'une instruction de code fait référence au nom de la variable, la version vers laquelle le compilateur résout la référence dépend de plusieurs facteurs, tels que l'emplacement de l'instruction de code et la présence d'une chaîne qualifiante. Cela peut augmenter le risque de référence à une version non souhaitée d'une variable occultée. Vous pouvez réduire ce risque en qualifiant complètement toutes les références à une variable occultée.
Voir aussi
Tâches
Comment : masquer une variable héritée (Visual Basic)
Comment : accéder à une variable masquée par une classe dérivée (Visual Basic)
Référence
Concepts
Références aux éléments déclarés (Visual Basic)
Différences entre l'occultation et la substitution (Visual Basic)