Routine Property (Visual Basic)

Una routine di proprietà è una serie 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 procedure di proprietà seguenti:

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

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

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

È possibile definire proprietà in classi, strutture e moduli. Le proprietà sono per impostazione predefinita, ovvero è possibile chiamarle da qualsiasi punto Public dell'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 tra l'istruzione Property e l'istruzione End Property . All'interno di questo blocco, ogni routine di proprietà viene visualizzata come blocco interno racchiuso tra un'istruzione di dichiarazione ( Get o ) e la dichiarazione Set 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]

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

Tipo di dati

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

Livello di accesso

Tuttavia, è possibile definire un livello di accesso principale per una proprietà e limitare ulteriormente il livello di accesso in una delle relative routine di proprietà. Ad esempio, è possibile definire una Public proprietà e quindi definire una Private Set routine. La Get procedura rimane Public . È possibile modificare il livello di accesso solo in una delle procedure di una proprietà e renderlo più restrittivo del livello di accesso principale. Per altre informazioni, vedere Procedura: Dichiarare una proprietà con livelli di accesso misti.

Dichiarazione di parametro

Ogni parametro viene dichiarato come per le routine sub, ad eccezione del fatto che il meccanismo di passaggio deve essere ByVal .

La sintassi per ogni parametro nell'elenco di 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 Get routine il valore restituito viene fornito all'espressione chiamante come valore della proprietà .

In una Set routine 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 implicito per rappresentare Value il nuovo valore da assegnare alla proprietà.

Sintassi di chiamata

Per richiamare una routine di proprietà in modo implicito, fare riferimento alla proprietà . Il nome della proprietà viene utilizzato nello stesso modo in cui si usa il nome di una variabile, ad eccezione del fatto che è necessario specificare valori per tutti gli argomenti non facoltativi ed è necessario racchiudere l'elenco di argomenti tra parentesi. Se non viene specificato alcun argomento, è possibile omettere facoltativamente le parentesi.

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

propertyname[(argumentlist)] = expression

La sintassi per una chiamata implicita a Get una routine è 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 costitutivi, il nome e il cognome. Quando il codice chiamante legge fullName , la routine combina i due nomi Get costitutivi e restituisce il nome completo. Quando il codice chiamante assegna un nuovo nome completo, la routine tenta Set di suddividerlo in due nomi costitutivi. Se non trova uno spazio, lo archivia 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

L'esempio seguente illustra le chiamate tipiche alle routine delle proprietà di fullName :

fullName = "MyFirstName MyLastName"
MsgBox(fullName)

Vedi anche