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 di dichiarazione per un elemento deve essere una classe, una struttura o un modulo e non può essere un file di origine, uno spazio dei nomi ReadOnly o una routine.

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

  • Assegnazione di un valore. Il codice che utilizza ReadOnly una proprietà non può impostarne il valore. Tuttavia, il codice che ha accesso all'archiviazione sottostante può assegnare o modificare il valore in qualsiasi momento.

    È possibile assegnare un valore a una variabile solo nella relativa dichiarazione o nel costruttore di una classe o struttura ReadOnly 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 potrebbe non accettare il tipo di dati da assegnare o potrebbe non essere possibile calcolare il valore in fase di compilazione Const con un'espressione costante. È anche possibile che non si sappia 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 viene inizializzata, la matrice a cui punta characterArray() contiene "x", "y" e "z". Poiché la variabile è , non è possibile modificarne il valore dopo l'inizializzazione. Non è quindi possibile assegnarle characterArray ReadOnly 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 punta contiene characterArray() "x", "M" e "z".

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

Esempio

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