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 elementoReadOnly
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 aStatic
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: