ReadOnly (Visual Basic)

Specifica che una variabile o una proprietà è di sola lettura e non è possibile scrivervi.

Osservazioni:

Regole

  • Contesto della dichiarazione. Si può usare ReadOnly solo a livello di modulo. Ciò significa che il contesto della dichiarazione per un elemento ReadOnly deve essere una classe, una struttura o un modulo e non può essere un file di origine, uno spazio dei nomi o una routine.

  • Modificatori combinati. Non è possibile specificare ReadOnly insieme a Static nella stessa dichiarazione.

  • Assegnazione di un valore. L'utilizzo di codice di una proprietà ReadOnly non ne può impostarne il valore. Tuttavia, il codice che ha accesso alla risorsa di archiviazione sottostante può assegnare o modificare il valore in qualsiasi momento.

    È possibile assegnare un valore a una variabile ReadOnly solo nella relativa dichiarazione o nel costruttore di una classe o di una struttura in cui è definita.

Quando usare una variabile ReadOnly

In alcune situazioni non è possibile usare un'istruzione Const per dichiarare e assegnare un valore costante. Ad esempio, l'istruzione Const potrebbe non accettare il tipo di dati da assegnare oppure potrebbe non essere possibile calcolare il valore in fase di compilazione con un'espressione costante. È possibile che non si conosca nemmeno il valore in fase di compilazione. In questi casi, è possibile usare una variabile ReadOnly per contenere un valore costante.

Importante

Se il tipo di dati della variabile è un tipo riferimento, ad esempio una matrice o un'istanza di classe, i relativi membri possono essere modificati anche se la variabile stessa è ReadOnly. Ciò è illustrato nell'esempio seguente.

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

Quando inizializzata, la matrice a cui characterArray() punta contiene "x", "y" e "z". Poiché la variabile characterArray è ReadOnly, non è possibile modificarne il valore dopo l'inizializzazione, ovvero non è possibile assegnarvi una nuova matrice. È tuttavia possibile modificare i valori di uno o più membri della matrice. Dopo una chiamata alla routine ChangeArrayElement, la matrice a cui characterArray() punta contiene "x", "M" e "z".

Si noti che è simile alla dichiarazione di un parametro di routine come ByVal, che impedisce alla routine di modificare l'argomento chiamante stesso, ma le consente di modificare i relativi membri.

Esempio

Nell'esempio seguente viene definita una proprietà ReadOnly per la data in cui è stato assunto un dipendente. La classe archivia internamente il valore della proprietà come variabile Private e solo il codice all'interno della classe può modificare tale valore. Tuttavia, la proprietà è Public e qualsiasi codice in grado di accedere alla classe può leggere la proprietà.

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

Il modificatore ReadOnly può essere usato nei contesti seguenti:

Vedi anche