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.


fragmento de argumento

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

fragmento de tipos primitivos de dados

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

caracteres de declaração de tipo

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

Exemplos

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