Condividi tramite


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 esempio Public.

  • 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 Interfaceoggetto oppure una proprietà contrassegnata come MustOverride.

Quando si dichiara una proprietà implementata automaticamente come membro di un Structureoggetto , è 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 o Set di una proprietà, ad esempio il codice per convalidare i valori in ingresso nella routine Set. È 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 e Set. Ad esempio, si può impostare la routine Set come Private e la routine Get come Public.

  • 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 routine Set.

  • 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.

Vedi anche