Istruzione Property

Una proprietà, chiamata anche campo o attributo, caratterizza un determinato oggetto o un pezzo di informazione. Le proprietà possono essere usate per controllare l'accesso ai dati. È pratica comune quella di inserire istruzioni al momento dell'impostazione o della lettura delle proprietà. Il codice, a seconda delle routine, può variare da una semplice istruzione fino ad un contesto complesso. Nei casi in cui ciò è necessario, l'uso delle istruzioni Get, Let o Set assicura la congruenza delle proprietà.

warning

Questa istruzione richiede che Option Compatible sia inserito nel modulo prima della parte eseguibile del programma.


Sintassi:

Diagramma istruzione Property Get


         [Private | Public] Property Get name[char | As typename]
         End Property
      

Diagramma istruzione Property Set


         [Private | Public] Property [Let | Set] name[char] [([Optional [ByRef | ByVal]]value[char | As typename])] [As typename]
         End Property
      

Parametri:

name: il nome della proprietà.

argument: valore da passare alla routine che imposta Property.

note

Le routine di impostazione di Property spesso usano un solo argomento. Comunque sono accettati anche argomenti multipli.


frammento di argomento

Frammento di argomento


      {[Optional [ByRef|ByVal]]|ParamArray} argument {{As typename|char}[ = expression]|[()]As Variant}
    
Parametri

Optional: l'argomento non è obbligatorio.

ByRef: l'argomento viene passato come riferimento. ByRef è l'impostazione predefinita.

ByVal: l'argomento viene passato come valore. Il suo valore può essere modificato dalla routine richiamata.

char: carattere di dichiarazione del Tipo.

typename: nome del tipo di dati primitivo. Si possono specificare anche tipi definiti in librerie o moduli.

= expression: specifica un valore predefinito per l'argomento, che rispetti il tipo dichiarato. Optional: per ogni argomento di questo tipo è necessario specificare un valore predefinito.

ParamArray: usate ParamArray quando il numero di parametri non è predeterminato. Uno scenario tipico è quello di una funzione di Calc definita dall'utente. L'uso di ParamArray dovrebbe essere limitato come ultimo parametro di una routine.

tip

L'uso di ParamArray o = expression richiede che Option Compatible sia posizionato, in un modulo, prima della parte eseguibile del programma.


warning

Se usate Option VBASupport 1, gli argomenti Optional senza un valore predefinito (= espressione) vengono inizializzati in base al loro tipo di dati, fatta eccezione per Variant.


frammento di nome di tipo

frammento di tipi di dati primitivi


      {Boolean|Byte|Currency|Date|Double|Integer|Long|Object|Single|String|Variant}
    
frammento di carattere

caratteri di dichiarazione del tipo


      { % | & | ! | # | $ | @ }
    

Esempi


      Option Compatible
      Sub Main
          ProductName = "Office"
          Print ProductName ' visualizza "LibreOffice"
      End Sub
      
      Private _office As String
      Property Get ProductName As String
          ProductName = _office
      End Property
      Property Let ProductName(value As String)
          _office = "Libre"& value
      End Property
      
tip

In assenza di Property Let o Property Set, Property Get aiuta a definire delle informazioni protette, che non possono essere modificate per errore da un modulo esterno:



      Option Compatible
      Public Property Get PathDelimiter As String ' variabile di sola lettura
          Static this As String
          If this = "" Then : Select Case GetGuiType()
              Case 1 : this = ";" ' Windows
              Case 4 : this = ":" ' Linux o macOS
              Case Else : Error 423 ' Proprietà o metodo non definito: PathDelimiter
          End Select : End If
          PathDelimiter = this
      End Property ' PathDelimiter di sola lettura
      
      Sub Main
          PathDelimiter = "una frase" ' non fa niente
      End Sub
      
note

Usate Let o Set se gestite servizi UNO od oggetti di classe:



      Option Compatible
      Sub Main
          'Set anObject = CreateUnoService( "com.sun.star.frame.Desktop" )
          anObject = CreateUnoService( "com.sun.star.frame.Desktop" )
          Print anObject.SupportedServiceNames(0) ' displays "com.sun.star.frame.Frame"
      End Sub
      
      Property Get anObject As Object
          Set anObject = _obj
      End Property
      
      Private _obj As Object
      
      'Property Set anObject(value As Object)
          'Set _obj = value.CurrentFrame
      'End Property
      Property Let anObject(value As Object)
          Set _obj = value.CurrentFrame
      End Property
      

Sosteneteci!