Proprietà implementate automaticamente (Visual Basic)
Le proprietà implementate automaticamente consentono di specificare rapidamente una proprietà di una classe senza dover scrivere codice in Get
e Set
la proprietà . Quando si scrive codice per una proprietà implementata automaticamente, il compilatore Visual Basic crea automaticamente un campo privato per archiviare la variabile di proprietà oltre a creare le routine e Set
associateGet
.
Con le proprietà implementate automaticamente, una proprietà, incluso un valore predefinito, può essere dichiarata in una singola riga. L'esempio seguente illustra tre dichiarazioni di proprietà.
Public Property Name As String
Public Property Owner As String = "DefaultName"
Public Property Items As New List(Of String) From {"M", "T", "W"}
Public Property ID As New Guid()
Una proprietà implementata automaticamente equivale a una proprietà per cui il valore della proprietà viene archiviato in un campo privato. Nell'esempio di codice seguente viene illustrata una proprietà implementata automaticamente.
Property Prop2 As String = "Empty"
Nell'esempio di codice seguente viene illustrato il codice equivalente per l'esempio di proprietà implementata automaticamente precedentemente.
Private _Prop2 As String = "Empty"
Property Prop2 As String
Get
Return _Prop2
End Get
Set(ByVal value As String)
_Prop2 = value
End Set
End Property
Il codice seguente illustra l'implementazione delle proprietà di sola lettura:
Class Customer
Public ReadOnly Property Tags As New List(Of String)
Public ReadOnly Property Name As String = ""
Public ReadOnly Property File As String
Sub New(file As String)
Me.File = file
End Sub
End Class
È possibile assegnare alla proprietà con espressioni di inizializzazione, come illustrato nell'esempio, oppure nel costruttore del tipo contenitore. È possibile assegnare ai campi sottostanti delle proprietà di sola lettura in qualsiasi momento.
Campo sottostante
Quando si dichiara una proprietà implementata automaticamente, Visual Basic crea automaticamente un campo privato nascosto denominato campo sottostante per contenere il valore della proprietà. Il nome del campo sottostante è il nome della proprietà implementato automaticamente preceduto da un carattere di sottolineatura (_). Ad esempio, se si dichiara una proprietà implementata automaticamente denominata ID
, il campo sottostante è denominato _ID
. Se si include un membro della classe con il medesimo nome _ID
, si produce un conflitto di denominazione e in Visual Basic viene segnalato un errore del compilatore.
Il campo sottostante presenta inoltre le caratteristiche seguenti:
Il modificatore di accesso per il campo sottostante è sempre
Private
, anche quando la proprietà stessa dispone di un livello di accesso diverso, ad esempioPublic
.Se la proprietà è contrassegnata come
Shared
, anche il campo sottostante è condiviso.Gli attributi specificati per la proprietà non si applicano al campo sottostante.
L'accesso al campo sottostante può essere eseguito dal codice all'interno della classe e dagli strumenti di debug, ad esempio la finestra Espressioni di controllo. Tuttavia, il campo sottostante non viene visualizzato in un elenco di completamento di parole di IntelliSense.
Inizializzazione di una proprietà implementata automaticamente
Qualsiasi espressione che può essere utilizzata per inizializzare un campo è valida per l'inizializzazione di una proprietà implementata automaticamente. Quando si inizializza una proprietà implementata automaticamente, l'espressione viene valutata e passata alla Set
routine per la proprietà . Gli esempi di codice seguenti mostrano alcune proprietà implementate automaticamente che includono valori iniziali.
Property FirstName As String = "James"
Property PartNo As Integer = 44302
Property Orders As New List(Of Order)(500)
Non è possibile inizializzare una proprietà implementata automaticamente che è un membro di un Interface
oggetto oppure una proprietà contrassegnata come MustOverride
.
Quando si dichiara una proprietà implementata automaticamente come membro di un Structure
oggetto , è possibile inizializzare la proprietà implementata automaticamente solo se è contrassegnata come Shared
.
Quando si dichiara una proprietà implementata automaticamente come matrice, non è possibile specificare limiti di matrice espliciti. Tuttavia, si può specificare un valore usando un inizializzatore di matrice, come illustrato negli esempi seguenti.
Property Grades As Integer() = {90, 73}
Property Temperatures As Integer() = New Integer() {68, 54, 71}
Definizioni di proprietà che richiedono la sintassi standard
Le proprietà implementate automaticamente sono utili e supportano molti scenari di programmazione. Tuttavia, esistono situazioni in cui non è possibile usare una proprietà implementata automaticamente e deve invece usare la sintassi standard o espansa della proprietà.
È necessario usare la sintassi di definizione della proprietà espansa se si vuole eseguire una delle operazioni seguenti:
Aggiungere codice alla routine
Get
oSet
di una proprietà, ad esempio il codice per convalidare i valori in ingresso nella routineSet
. È possibile, ad esempio, verificare che una stringa che rappresenta un numero di telefono contenga il numero obbligatorio di numerali prima di impostare il valore della proprietà.Specificare un'accessibilità diversa per le routine
Get
eSet
. Ad esempio, si può impostare la routineSet
comePrivate
e la routineGet
comePublic
.Creare proprietà
WriteOnly
.Usare proprietà con parametri (incluse le proprietà
Default
). È necessario dichiarare una proprietà espansa per specificare un parametro per la proprietà o per specificare parametri aggiuntivi per la routineSet
.Inserire un attributo nel campo sottostante o modificare il livello di accesso del campo sottostante.
Fornire commenti XML per il campo sottostante.
Espansione di una proprietà implementata automaticamente
Se è necessario convertire una proprietà implementata automaticamente in una proprietà espansa contenente una Get
routine o Set
, l'editor di codice di Visual Basic può generare automaticamente le Get
routine e Set
e l'istruzione End Property
per la proprietà . Il codice viene generato se si posiziona il cursore su una riga vuota che segue l'istruzione Property
, si digita una G
(per Get
) o una S
(per Set
) e si preme INVIO. L'editor di codice di Visual Basic genera automaticamente la routine Get
o Set
per le proprietà di sola lettura e di sola scrittura quando si preme INVIO alla fine di un'istruzione Property
.