Finora potevamo definire una proprietà solamente nel modo completo, indicando le sezioni Get e Set, anche se l'unica funzione di tali sezioni era assegnare e leggere la variabile interna:
Visual Basic
- Private _miaProprieta As String
- Public Property miaProprieta() As String
- Get
- Return _miaProprieta
- End Get
- Set(ByVal Value As String)
- _miaProprieta = Value
- End Set
- End Property
In effetti, anche lo snippet specifico per le proprietà, che si inserisce scrivendo Property in una riga vuota e premendo il tasto per la tabulazione, definisce il seguente codice (con gli opportuni segnaposti per l'inserimento dei nomi desiderati):
Visual Basic
- ' snippet Property
- Private newPropertyValue As String
- Public Property NewProperty() As String
- Get
- Return newPropertyValue
- End Get
- Set(ByVal value As String)
- newPropertyValue = value
- End Set
- End Property
Ora, se non abbiamo la necessità di specificare ulteriore codice all'interno delle sezioni Get e Set, possiamo definire una proprietà in modo abbreviato:
Visual Basic
- Public Property miaProprieta As String
Questo stesso codice si ottiene utilizzando la nuova funzione per l'autogenerazione delle proprietà.
Con la stessa istruzione possiamo anche assegnare un valore alla proprietà:
Visual Basic
- Public Property miaProprieta As String = "Semplice vero?"
L'aspetto interessante di questa nuova implementazione è dato dal fatto che viene definita, in modo implicito, una variabile privata con lo stesso nome della proprietà, prefissato dal carattere underscore ("_"). Nel caso dell'esempio che abbiamo appena fatto, quindi, viene definita una variabile privata di tipo String e di nome _miaProprieta.
Questo automatismo è dimostrato dall'errore che viene visualizzato da IntelliSense quando definiamo a nostra volta una variabile con lo stesso nome.
Rimane l'obbligo di scrivere per esteso la definizione delle proprietà a sola lettura o a sola scrittura, dato che è necessario specificare tali caratteristiche con le parole riservate ReadOnly e WriteOnly:
Visual Basic
- ' proprieta' a sola lettura
- Private _propReadOnly As Integer
- Public ReadOnly Property CountDown() As Integer
- Get
- _propReadOnly -= 1
- Return _propReadOnly
- End Get
- End Property
-
- ' proprieta' a sola scrittura
- Public WriteOnly Property NumeroCartaCredito() As Integer
- Set(ByVal value As Integer)
- _propReadOnly = value
- End Set
- End Property
Nel primo esempio illustrato la proprietà può essere letta ma non modificata, dato che un conto alla rovescia deve essere gestito solo internamente al programma. D'altro canto, nel secondo caso la proprietà può essere valorizzata ma non letta dall'esterno, visto che nessuno vorrebbe che qualcun altro fosse in grado di leggere il numero di carta di credito da noi inserito.