ReadOnly in Visual Basic
Per definire un campo di una classe in sola lettura utilizzo la parola chiave ReadOnly al momento della dichiarazione.
Public ReadOnly [nome] As [tipo]
Una variabile definita con ReadOnly può essere letta ma non modificata.
Un esempio pratico
In questa classe creo la variabile test dichiarandola ReadOnly
- Public Class Esempio
- Public ReadOnly test As Integer = 1
- End Class
Poi creo un oggetto con la classe Esempio
Dim oggetto As New Esempio()
Dall'esterno posso leggere il valore della variabile test
Console.Write(oggetto.test)
Questa istruzione restituisce il valore uno
1
Non posso, invece, modificare il valore assegnato alla variabile test
oggetto.test = 2
Quest'ultima istruzione andrebbe in errore perché la variabile è solo in lettura.
Esempio 2
Definisco una classe con una variabile nascosta _nome.
- Class Persone
- Private _nome As String
- Public ReadOnly Property nome As String
- Get
- Return _nome
- End Get
- End Property
- Public Sub New()
- _nome="anonimo"
- End Sub
- Public Sub(ByBal nome As String)
- _nome=nome
- End Sub
- End Class
La variabile _name alla riga 2 è del tipo Private. Quindi, non può essere vista dall'esterno.
Nelle righe 3-7 uso una proprietà pubblica nome di sola lettura (Readonly) per consentire la lettura della variabile _name dall'esterno tramite il metodo Get.
Infine, nelle righe 8-13 definisco due costruttori per istanziare gli oggetti.
Quando istanzio un oggetto alla classe, alla variabile _nome viene assegnato la stringa che passo come parametro.
oggetto = Persone("Andrea")
Posso leggere il contenuto della variabile _nome invocando il metodo get.
Console.Writeline(oggetto.nome)
L'output è
Andrea
Non posso però modificare la variabile perché le proprietà readonly non hanno il metodo SET.
Una volta istanziato l'oggetto, il nome non è più modificabile.
Esempio 3
Lo stesso codice dell'esempio 2 posso riorganizzarlo in modo più sintetico con una proprietà automatica senza usare una variabile interna
- Class Persone
- Public ReadOnly Property nome As String
- Public Sub New()
- nome="anonimo"
- End Sub
- Public Sub(ByBal nome As String)
- Me.nome=nome
- End Sub
- End Class
Alla riga 2 la variabile nome è del tipo Public (pubblica) e Readonly. Quindi, può essere soltanto letta dall'esterno.
In questo modo non devo creare un metodo Get per leggerla.
Infine, nelle righe 3-8 definisco due costruttori per istanziare gli oggetti.
Il codice ha lo stesso funzionamento dell'esempio 2.
E così via.