Instrução Property

Uma propriedade, também chamada de campo ou atributo, caracteriza um objeto ou parte de uma informação. Propriedades podem ser utilizadas para o controle de acesso a dados. É uso comum incluir instruções em tempo de definição e de leitura de propriedades. O código pode variar de um a simples atribuição a rotinas complexas que dependem do contexto. Utilizar os meios de acesso Get, Let ou Set reforça a consistência da propriedade quando necessário.

warning

Esta instrução requer que a instrução Option Compatible seja colocada antes do código do programa no módulo.


Sintaxe:

Diagrama da propriedade da instrução Get


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

Diagrama da propriedade da instrução Set


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

Parâmetros:

name: o nome da propriedade.

argument: Valor a passar para a Property da rotina.

note

Os setters de Property em geral usam um argumento único. Também aceitam argumentos múltiplos.


argument fragment

fragmento de argumento


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

Optional: o argumento não é obrigatório.

ByRef: o argumento é passado por referência. ByRef é o padrão.

ByVal: o argumento é passado por valor. Seu valor pode ser modificado pela rotina chamada.

char: caractere de declaração de tipo.

typename: nome do tipo de dado primitivo. Podem ser especificados tipos definidos em bibliotecas e módulos.

= expression: especifica um valor padrão para o argumento que confere com seu tipo declarado.Optional é necessário para cada argumento que especifica um valor padrão.

ParamArray: Utilize ParamArray quando o número de parâmetros é indeterminado. Um cenário típico é de uma função definida pelo usuário no Calc. Utilizar ParamArray deveria ser limitado ao último argumento de uma rotina.

tip

Utilizar ParamArray ou = expression requer que Option Compatible seja colocada antes de um código executável num módulo.


warning

Ao utilizar Option VBASupport 1, argumentos Optional sem valor padrão (= expression) são inicializados de acordo com seus tipos de dados , com exceção de Variant.


Fragmento typename

fragmento de tipos primitivos de dados


      {Boolean|Byte|Currency|Date|Double|Integer|Long|Object|Single|String|Variant}
    
Fragmento char

caracteres de declaração de tipo


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

Exemplos


      Option Compatible
      Sub Main
          ProductName = "Office"
          Print ProductName ' exibe "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

Na ausência de Property Let oo Property Set, Property Get auxilia a definir informações protegidas, que não podem ser alteradas acidentalmente por um módulo estrangeiro:



      Option Compatible
      Public Property Get PathDelimiter As String ' variável só leitura
          Static this As String
          If this = "" Then : Select Case GetGuiType()
              Case 1 : this = ";" ' Windows
              Case 4 : this = ":" ' Linux ou macOS
              Case Else : Error 423 ' Propriedade ou método indefinido: PathDelimiter
          End Select : End If
          PathDelimiter = this
      End Property ' somente leitura PathDelimiter
      
      Sub Main
          PathDelimiter = "a sentence" ' não faz nada
      End Sub
      
note

Utilize Let ou Set ao tratar serviços UNO ou objetos classes:



      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
      

♥ Doe para nosso projeto! ♥