ReadOnly (Visual Basic)

Spécifie qu’une variable ou une propriété peut être lue, mais pas écrite.

Notes

Règles

  • Contexte de déclaration. Vous pouvez utiliser ReadOnly seulement au niveau du module. Cela signifie que le contexte de déclaration d'un élément ReadOnly doit être une classe, une structure ou un module, et ne peut pas être un fichier source, un espace de noms ou une procédure.

  • Modificateurs combinés. Vous ne pouvez pas spécifier ReadOnly avec Static dans la même déclaration.

  • Attribution d’une valeur. Un code consommant une propriété ReadOnly ne peut pas définir sa valeur. Toutefois, le code qui a accès au stockage sous-jacent peut attribuer ou modifier la valeur à tout moment.

    Vous ne pouvez attribuer une valeur à une variable ReadOnly que dans sa déclaration ou dans le constructeur d'une classe ou d'une structure dans laquelle elle est définie.

Quand utiliser une variable ReadOnly

Il existe des situations dans lesquelles vous ne pouvez pas utiliser une Instruction Const pour déclarer et attribuer une valeur constante. Par exemple, l’instruction Const peut ne pas accepter le type de données que vous souhaitez attribuer, ou vous ne pourrez peut-être pas calculer la valeur au moment de la compilation avec une expression constante. Vous ne connaissez peut-être même pas la valeur au moment de la compilation. Dans ces cas, vous pouvez utiliser une variable ReadOnly pour contenir une valeur constante.

Important

Si le type de données de la variable est un type référence, tel qu’un tableau ou une instance de classe, ses membres peuvent être modifiés même si la variable elle-même est ReadOnly. L'exemple suivant illustre ce comportement.

ReadOnly characterArray() As Char = {"x"c, "y"c, "z"c}
Sub ChangeArrayElement()
    characterArray(1) = "M"c
End Sub

Lors de l’initialisation, le tableau pointé par characterArray() contient « x », « y » et « z ». Étant donné que la variable characterArray est ReadOnly, vous ne pouvez pas modifier sa valeur une fois qu’elle est initialisée ; autrement dit, vous ne pouvez pas lui attribuer un nouveau tableau. Toutefois, vous pouvez modifier les valeurs d’un ou plusieurs membres du tableau. Après un appel à la procédure ChangeArrayElement, le tableau pointé par characterArray() contient « x », « M » et « z ».

Notez que cela est similaire à la déclaration d’un paramètre de procédure à ByVal, ce qui empêche la procédure de modifier l’argument appelant lui-même, mais lui permet de modifier ses membres.

Exemple

L’exemple suivant définit une propriété ReadOnly pour la date à laquelle un employé a été embauché. La classe stocke la valeur de propriété en interne sous forme de variable Private, et seul le code à l’intérieur de la classe peut modifier cette valeur. Toutefois, la propriété est Public, et tout code pouvant accéder à la classe peut lire la propriété.

Class employee
    ' Only code inside class employee can change the value of hireDateValue.
    Private hireDateValue As Date
    ' Any code that can access class employee can read property dateHired.
    Public ReadOnly Property dateHired() As Date
        Get
            Return hireDateValue
        End Get
    End Property
End Class

Le modificateur ReadOnly peut être utilisé dans les contextes suivants :

Voir aussi