ReadOnly (Visual Basic)

Specifica che una variabile o una proprietà può essere letta ma non scritta.

Commenti

Regole

  • Contesto della dichiarazione. Si può usare ReadOnly solo a livello di modulo. Ciò significa che il contesto della dichiarazione per un ReadOnly elemento 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 con Static nella stessa dichiarazione.

  • Assegnazione di un valore. Il codice che utilizza una ReadOnly proprietà non 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 ReadOnly variabile solo nella relativa dichiarazione o nel costruttore di una classe o di una struttura in cui è definita.

Quando usare una variabile ReadOnly

Esistono situazioni in cui 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 ReadOnly variabile 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. Questa condizione è illustrata 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 characterArray() cui 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 characterArray() cui 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 di modificarne i membri.

Esempio

Nell'esempio seguente viene definita una ReadOnly proprietà per la data in cui è stato assunto un dipendente. La classe archivia internamente il valore della proprietà come Private variabile e solo il codice all'interno della classe può modificare tale valore. Tuttavia, la proprietà è Publice 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