Sumário
Índice 🔎︎

# 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.

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

### Sintaxe:

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

             [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.

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

##### 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.

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

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 de nome de tipo

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

##### fragmento de caractere

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

## 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

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

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

Tópicos relacionados

Aspectos básicos das subrotinas

Utilizar procedimentos, funções e propriedades

Instrução Function

Instrução Sub

Instruções End, Exit

Instrução Option ClassModule

Instrução Option Compatible