Routine Property (Visual Basic)

Una routine di proprietà è una serie di istruzioni di Visual Basic che modificano una proprietà personalizzata in un modulo, una classe o una struttura. Le routine di proprietà sono note anche come funzioni di accesso alle proprietà.

Visual Basic fornisce le routine di proprietà seguenti:

  • Una routine Get restituisce il valore di una proprietà. Viene chiamata quando si accede alla proprietà in un'espressione.
  • Una routine Set imposta una proprietà su un valore, incluso un riferimento a un oggetto. Viene chiamata quando si assegna un valore alla proprietà.

In genere si definiscono le routine di proprietà in coppie, usando le istruzioni Get e Set, ma è possibile definire una sola routine se la proprietà è di sola lettura (istruzione Get) o di sola scrittura (istruzione Set).

È possibile omettere la Get routine e Set quando si usa una proprietà implementata automaticamente. Per altre informazioni, vedere Proprietà implementate automaticamente.

È possibile definire proprietà in classi, strutture e moduli. Le proprietà sono Public per impostazione predefinita, di conseguenza è possibile chiamarle da qualsiasi posizione nell'applicazione in grado di accedere al contenitore della proprietà.

Per un confronto tra proprietà e variabili, vedere Differenze tra proprietà e variabili in Visual Basic.

Sintassi di dichiarazione

Una proprietà stessa è definita da un blocco di codice racchiuso all'interno dell'istruzione Property e dell'istruzione End Property. All'interno di questo blocco, ogni routine di proprietà viene visualizzata come blocco interno racchiuso in un'istruzione di dichiarazione (Get o Set) e nela dichiarazione End corrispondente.

La sintassi per dichiarare una proprietà e le relative routine è la seguente:

[Default] [Modifiers] Property PropertyName[(ParameterList)] [As DataType]
    [AccessLevel] Get
        ' Statements of the Get procedure.
        ' The following statement returns an expression as the property's value.
        Return Expression
    End Get
    [AccessLevel] Set[(ByVal NewValue As DataType)]
        ' Statements of the Set procedure.
        ' The following statement assigns newvalue as the property's value.
        LValue = NewValue
    End Set
End Property
' - or -
[Default] [Modifiers] Property PropertyName [(ParameterList)] [As DataType]

Modifiers può specificare il livello di accesso e le informazioni relative a overload, override, condivisione e shadowing, nonché al fatto che la proprietà sia di sola lettura o di sola scrittura. AccessLevel nella routine Get o Set può essere qualsiasi livello più restrittivo rispetto al livello di accesso specificato per la proprietà stessa. Per altre informazioni, vedere Istruzione Property.

Tipo di dati

Il tipo di dati e il livello di accesso dell'entità di sicurezza di una proprietà vengono definiti nell'istruzione Property, non nelle routine delle proprietà. Una proprietà può avere un solo tipo di dati. Ad esempio, non è possibile definire una proprietà per archiviare un valore Decimal ma recuperare un valore Double.

Livello di accesso

È tuttavia possibile definire un livello di accesso dell'entità di sicurezza per una proprietà e limitare ulteriormente il livello di accesso in una delle relative routine di proprietà. Ad esempio, è possibile definire una proprietà Public e quindi definire una routine Private Set. La routine Get rimane Public. È possibile modificare il livello di accesso in una sola delle routine di una proprietà e renderlo solo più restrittivo del livello di accesso dell'entità di sicurezza. Per altre informazioni, vedere Procedura: dichiarare una proprietà con livelli di accesso misti.

Dichiarazione dei parametri

Ogni parametro viene dichiarato nello stesso modo usato per le routine Sub, ad eccezione del fatto che il meccanismo di passaggio deve essere ByVal.

La sintassi per ogni parametro nell'elenco dei parametri è la seguente:

[Optional] ByVal [ParamArray] parametername As datatype

Se il parametro è facoltativo, è necessario specificare anche un valore predefinito come parte della relativa dichiarazione. La sintassi per specificare un valore predefinito è la seguente:

Optional ByVal parametername As datatype = defaultvalue

Valore proprietà

In una routine Get, il valore restituito viene fornito all'espressione chiamante come valore della proprietà.

In una routine Set, il nuovo valore della proprietà viene passato al parametro dell'istruzione Set. Se si dichiara in modo esplicito un parametro, è necessario dichiararlo con lo stesso tipo di dati della proprietà. Se non si dichiara un parametro, il compilatore usa il parametro Value implicito per rappresentare il nuovo valore da assegnare alla proprietà.

Sintassi di chiamata

Per richiamare una routine di proprietà in modo implicito, fare riferimento alla proprietà. Usare il nome della proprietà nello stesso modo in cui si userebbe il nome di una variabile, ad eccezione del fatto che è necessario specificare i valori per tutti gli argomenti non facoltativi e racchiudere l'elenco di argomenti tra parentesi. Se non vengono specificati argomenti, è facoltativamente possibile omettere le parentesi.

La sintassi per una chiamata implicita a una routine Set è la seguente:

propertyname[(argumentlist)] = expression

La sintassi per una chiamata implicita a una routine Get è la seguente:

lvalue = propertyname[(argumentlist)]
Do While (propertyname[(argumentlist)] > expression)

Illustrazione della dichiarazione e della chiamata

La proprietà seguente archivia un nome completo come due nomi costituenti, il nome e il cognome. Quando il codice chiamante legge fullName, la routine Get combina i due nomi costituenti e restituisce il nome completo. Quando il codice chiamante assegna un nuovo nome completo, la routine Set tenta di suddividerlo in due nomi costituenti. Se non trova uno spazio, lo archivia tutto come nome.

Dim firstName, lastName As String
Property fullName() As String
    Get
      If lastName = "" Then
          Return firstName
      Else
          Return firstName & " " & lastName
      End If

    End Get
    Set(ByVal Value As String)
        Dim space As Integer = Value.IndexOf(" ")
        If space < 0 Then
            firstName = Value
            lastName = ""
        Else
            firstName = Value.Substring(0, space)
            lastName = Value.Substring(space + 1)
        End If
    End Set
End Property

Nell'esempio seguente vengono illustrate le chiamate tipiche alle routine di proprietà di fullName:

fullName = "MyFirstName MyLastName"
MsgBox(fullName)

Vedi anche