Istruzione Property

Dichiara il nome di una proprietà e le routine della proprietà usate per archiviare e recuperare il valore della proprietà.

Sintassi

[ <attributelist> ] [ Default ] [ accessmodifier ]
[ propertymodifiers ] [ Shared ] [ Shadows ] [ ReadOnly | WriteOnly ] [ Iterator ]
Property name ( [ parameterlist ] ) [ As returntype ] [ Implements implementslist ]
    [ <attributelist> ] [ accessmodifier ] Get
        [ statements ]
    End Get
    [ <attributelist> ] [ accessmodifier ] Set ( ByVal value As returntype [, parameterlist ] )
        [ statements ]
    End Set
End Property
- or -
[ <attributelist> ] [ Default ] [ accessmodifier ]
[ propertymodifiers ] [ Shared ] [ Shadows ] [ ReadOnly | WriteOnly ]
Property name ( [ parameterlist ] ) [ As returntype ] [ Implements implementslist ]

Parti

  • attributelist

    Facoltativo. Elenco di attributi applicabili a questa proprietà o routine Get o Set. Vedere Elenco degli attributi.

  • Default

    Facoltativo. Specifica che questa proprietà è la proprietà predefinita per la classe o la struttura in cui è definita. Le proprietà predefinite devono accettare parametri e possono essere impostate e recuperate senza specificare il nome della proprietà. Se si dichiara la proprietà come Default, non è possibile utilizzare Private nella proprietà o in una delle relative routine di proprietà.

  • accessmodifier

    Facoltativo nell'istruzione Property e al massimo in una delle istruzioni Get e Set. Può essere uno dei seguenti:

    Vedere Access levels in Visual Basic.

  • propertymodifiers

    Facoltativo. Può essere uno dei seguenti:

  • Shared

    Facoltativo. Vedere Shared.

  • Shadows

    Facoltativo. Vedere Shadows.

  • ReadOnly

    Facoltativo. Vedere ReadOnly.

  • WriteOnly

    Facoltativo. Vedere WriteOnly.

  • Iterator

    Facoltativo. Vedere Iteratore.

  • name

    Obbligatorio. Nome della proprietà. Vedere Declared Element Names.

  • parameterlist

    Facoltativo. Elenco di nomi di variabili locali che rappresentano i parametri di questa proprietà e possibili parametri aggiuntivi della routine Set. Vedere Elenco parametri.

  • returntype

    Richiesto se Option Strict è On. Tipo di dati del valore restituito da questa proprietà.

  • Implements

    Facoltativo. Indica che questa proprietà implementa una o più proprietà, ognuna definita in un'interfaccia implementata dalla classe o dalla struttura contenitore di questa proprietà. Vedere Istruzione Implements.

  • implementslist

    Necessario se si fornisce Implements. Elenco delle proprietà da implementare.

    implementedproperty [ , implementedproperty ... ]

    Ogni implementedproperty presenta la sintassi e le parti seguenti:

    interface.definedname

    In parte Descrizione
    interface Obbligatorio. Nome di un'interfaccia implementata dalla classe o dalla struttura che contiene questa proprietà.
    definedname Obbligatorio. Nome in base al quale la proprietà è definita in interface.
  • Get

    Facoltativo. Obbligatorio se la proprietà è contrassegnata come ReadOnly. Avvia una routine di proprietà Get utilizzata per restituire il valore della proprietà. L'istruzione Get non viene usata con le proprietà implementate automaticamente.

  • statements

    Facoltativo. Blocco di istruzioni da eseguire all'interno della routine Get o Set.

  • End Get

    Termina la routine della proprietà Get.

  • Set

    Facoltativo. Obbligatorio se la proprietà è contrassegnata come WriteOnly. Avvia una routine di proprietà Set utilizzata per archiviare il valore della proprietà. L'istruzione Set non viene usata con le proprietà implementate automaticamente.

  • End Set

    Termina la routine della proprietà Set.

  • End Property

    Termina la definizione di questa proprietà.

Osservazioni:

L'istruzione Property introduce la dichiarazione di una proprietà. Una proprietà può avere una routine di Get (sola lettura), una routine Set (solo scrittura) o entrambe (lettura/scrittura). È possibile omettere la routine Get e Set quando si usa una proprietà implementata automaticamente. Per altre informazioni, vedere Proprietà implementate automaticamente.

Si può usare Property solo a livello di classe. In altri termini, il contesto della dichiarazione per una proprietà deve essere una classe, una struttura, un modulo o un'interfaccia e non può essere un file di origine, uno spazio dei nomi, una routine o un blocco. Per altre informazioni, vedere Contesti delle dichiarazioni e livelli di accesso predefiniti.

Per impostazione predefinita, le proprietà usano l'accesso pubblico. È possibile modificare il livello di accesso di una proprietà con un modificatore di accesso nell'istruzione Property e, facoltativamente, è possibile modificare una delle relative procedure di proprietà a un livello di accesso più restrittivo.

Visual Basic passa un parametro alla routine Set durante le assegnazioni di proprietà. Se non si specifica un parametro per Set, l'ambiente di sviluppo integrato (IDE) usa un parametro implicito denominato value. Questo parametro contiene il valore da assegnare alla proprietà. Questo valore viene in genere archiviato in una variabile locale privata e restituito ogni volta che viene chiamata la routine Get.

Regole

  • Livelli di accesso misti. Se si definisce una proprietà di lettura/scrittura, è possibile specificare facoltativamente un livello di accesso diverso per la routine Get o Set, ma non entrambi. In questo caso, il livello di accesso della procedura deve essere più restrittivo del livello di accesso della proprietà. Ad esempio, se la proprietà è dichiarata Friend, è possibile dichiarare la routine SetPrivate, ma non Public.

    Se si definisce una proprietà ReadOnly o WriteOnly, la singola routine di proprietà ( rispettivamente Get o Set) rappresenta tutte le proprietà. Non è possibile dichiarare un livello di accesso diverso per una procedura di questo tipo, perché in questo modo verranno impostati due livelli di accesso per la proprietà.

  • Tipo restituito. L'istruzione Property può dichiarare il tipo di dati del valore restituito. È possibile specificare qualsiasi tipo di dati o il nome di un'enumerazione, struttura, classe o interfaccia.

    Se non si specifica returntype, la proprietà restituisce Object.

  • Implementazione. Se questa proprietà usa la parola chiave Implements, la classe o la struttura contenitore deve disporre di un'istruzione Implements immediatamente dopo l'istruzione Class o Structure. L'istruzione Implements deve includere ogni interfaccia specificata in implementslist. Tuttavia, il nome in base al quale un'interfaccia definisce Property (in definedname) non deve essere uguale al nome di questa proprietà (in name).

Comportamento

  • Restituzione da una routine di proprietà. Quando la routine Get o Set torna al codice chiamante, l'esecuzione continua con l'istruzione che segue l'istruzione che lo ha richiamato.

    Le istruzioni Exit Property e Return causano un'uscita immediata da una routine di proprietà. Qualsiasi numero di istruzioni Exit Property e Return può essere visualizzata in qualsiasi punto della routine ed è possibile combinare istruzioni Exit Property e Return.

  • Valore restituito. Per restituire un valore da una routine Get, è possibile assegnare il valore al nome della proprietà o includerlo in un'istruzione Return. Nell'esempio seguente il valore restituito viene assegnato al nome quoteForTheDay della proprietà e quindi viene utilizzata l'istruzione Exit Property per restituire.

    Private quoteValue As String = "No quote assigned yet."
    
    ReadOnly Property QuoteForTheDay() As String
        Get
            QuoteForTheDay = quoteValue
            Exit Property
        End Get
    End Property
    

    Se si utilizza Exit Property senza assegnare un valore a name, la routine Get restituisce il valore predefinito per il tipo di dati della proprietà.

    L'istruzione Return allo stesso tempo assegna il valore restituito della routine Get ed esce dalla routine. Nell'esempio riportato di seguito viene illustrata questa situazione.

    Private quoteValue As String = "No quote assigned yet."
    
    ReadOnly Property QuoteForTheDay() As String
        Get
            Return quoteValue
        End Get
    End Property
    

Esempio

Nell'esempio seguente viene dichiarata una proprietà in una classe.

Class Class1
    ' Define a local variable to store the property value.
    Private propertyValue As String
    ' Define the property.
    Public Property Prop1() As String
        Get
            ' The Get property procedure is called when the value
            ' of a property is retrieved.
            Return propertyValue
        End Get
        Set(ByVal value As String)
            ' The Set property procedure is called when the value
            ' of a property is modified.  The value to be assigned
            ' is passed in the argument to Set.
            propertyValue = value
        End Set
    End Property
End Class

Vedi anche