Procédures de propriété (Visual Basic)

Une procédure de propriété est une série d’instructions Visual Basic qui manipulent une propriété personnalisée sur un module, une classe ou une structure. Les procédures de propriété sont également appelées accesseurs de propriétés.

Visual Basic fournit les procédures de propriété suivantes :

  • Une procédure Get retourne la valeur d’une propriété. Elle est appelée lorsque vous accédez à la propriété dans une expression.
  • Une procédure Set définit une propriété sur une valeur, y compris une référence d’objet. Elle est appelée lorsque vous affectez une valeur à la propriété.

Vous définissez généralement des procédures de propriété en paires, à l’aide des instructions Get et Set , mais vous pouvez définir une procédure seule si la propriété est en lecture seule (Get Statement) ou en écriture seule (Set Statement).

Vous pouvez omettre la procédure Get et Set lors de l’utilisation d’une propriété implémentée automatiquement. Pour plus d’informations, consultez Propriétés implémentées automatiquement.

Vous pouvez définir des propriétés dans des classes, des structures et des modules. Les propriétés sont Public par défaut, ce qui signifie que vous pouvez les appeler n’importe où dans votre application qui peuvent accéder au conteneur de la propriété.

Pour obtenir une comparaison des propriétés et des variables, consultez Différences entre les propriétés et les variables dans Visual Basic.

Syntaxe de déclaration

Une propriété elle-même est définie par un bloc de code placé dans l’instruction Property et l’instruction End Property . À l’intérieur de ce bloc, chaque procédure de propriété apparaît sous la forme d’un bloc interne placé dans une instruction de déclaration (Get ou Set) et de la déclaration de End correspondante.

La syntaxe de déclaration d’une propriété et de ses procédures est la suivante :

[Default] [Modifiers] Property PropertyName[(ParameterList)] [As DataType]
    [AccessLevel] Get
        ' Statements of the Get procedure.
        ' The following statement returns an expression as the property's value.
        Return Expression
    End Get
    [AccessLevel] Set[(ByVal NewValue As DataType)]
        ' Statements of the Set procedure.
        ' The following statement assigns newvalue as the property's value.
        LValue = NewValue
    End Set
End Property
' - or -
[Default] [Modifiers] Property PropertyName [(ParameterList)] [As DataType]

Le Modifiers peut spécifier le niveau d’accès et les informations concernant la surcharge, la substitution, le partage et l’ombre, ainsi que si la propriété est en lecture seule ou en écriture seule. Le AccessLevel de la procédure Get ou Set peut être n’importe quel niveau plus restrictif que le niveau d’accès spécifié pour la propriété elle-même. Pour plus d’informations, consultez Property Statement.

Type de données

Le type de données et le niveau d’accès principal d’une propriété sont définis dans l’instruction Property , et non dans les procédures de propriété. Une propriété ne peut avoir qu’un seul type de données. Par exemple, vous ne pouvez pas définir une propriété pour stocker une valeur Decimal , mais récupérer une valeur Double .

Niveau d’accès

Toutefois, vous pouvez définir un niveau d’accès principal pour une propriété et restreindre davantage le niveau d’accès dans l’une de ses procédures de propriété. Par exemple, vous pouvez définir une propriété Public , puis définir une procédure Private Set . La procédure Get reste Public. Vous pouvez modifier le niveau d’accès dans une seule des procédures d’une propriété, et vous ne pouvez le rendre plus restrictif que le niveau d’accès principal. Pour plus d’informations, consultez Comment : déclarer une propriété avec des niveaux d’accès mixtes.

Déclaration de paramètre

Vous déclarez chaque paramètre de la même façon que pour sous-procédures, sauf que le mécanisme de passage doit être ByVal.

La syntaxe de chaque paramètre de la liste des paramètres est la suivante :

[Optional] ByVal [ParamArray] parametername As datatype

Si le paramètre est facultatif, vous devez également fournir une valeur par défaut dans le cadre de sa déclaration. La syntaxe permettant de spécifier une valeur par défaut est la suivante :

Optional ByVal parametername As datatype = defaultvalue

Valeur de la propriété

Dans une procédure Get , la valeur de retour est fournie à l’expression appelante comme valeur de la propriété.

Dans une procédure Set , la nouvelle valeur de propriété est passée au paramètre de l’instruction Set . Si vous déclarez explicitement un paramètre, vous devez le déclarer avec le même type de données que la propriété. Si vous ne déclarez pas de paramètre, le compilateur utilise le paramètre implicite Value pour représenter la nouvelle valeur à affecter à la propriété.

Syntaxe appelante

Vous appelez implicitement une procédure de propriété en faisant référence à la propriété. Vous utilisez le nom de la propriété de la même façon que vous utilisez le nom d’une variable, sauf que vous devez fournir des valeurs pour tous les arguments qui ne sont pas facultatifs, et vous devez placer la liste d’arguments entre parenthèses. Si aucun argument n’est fourni, vous pouvez éventuellement omettre les parenthèses.

La syntaxe d’un appel implicite à une procédure Set est la suivante :

propertyname[(argumentlist)] = expression

La syntaxe d’un appel implicite à une procédure Get est la suivante :

lvalue = propertyname[(argumentlist)]
Do While (propertyname[(argumentlist)] > expression)

Illustration de la déclaration et de l’appel

La propriété suivante stocke un nom complet sous la forme de deux noms constituants, le prénom et le nom. Lorsque le code appelant lit fullName, la procédure Get combine les deux noms constituants et retourne le nom complet. Lorsque le code appelant attribue un nouveau nom complet, la procédure Set tente de le diviser en deux noms constitutifs. S’il ne trouve pas d’espace, il le stocke comme prénom.

Dim firstName, lastName As String
Property fullName() As String
    Get
      If lastName = "" Then
          Return firstName
      Else
          Return firstName & " " & lastName
      End If

    End Get
    Set(ByVal Value As String)
        Dim space As Integer = Value.IndexOf(" ")
        If space < 0 Then
            firstName = Value
            lastName = ""
        Else
            firstName = Value.Substring(0, space)
            lastName = Value.Substring(space + 1)
        End If
    End Set
End Property

L’exemple suivant montre des appels classiques aux procédures de propriété de fullName:

fullName = "MyFirstName MyLastName"
MsgBox(fullName)

Voir aussi