Como declarar e chamar uma propriedade padrão no Visual Basic

Uma propriedade padrão é uma propriedade de classe ou estrutura que seu código pode acessar sem especificá-la. Ao chamar os nomes de código de uma classe ou estrutura, mas não uma propriedade, se o contexto permitir o acesso a uma propriedade, o Visual Basic resolverá o acesso à propriedade padrão dessa classe ou estrutura, se existir.

Uma classe ou estrutura pode ter no máximo uma propriedade padrão. No entanto, você pode sobrecarregar uma propriedade padrão e ter mais de uma versão dela.

Para obter mais informações, confira Padrão.

Para declarar uma propriedade padrão

  1. Declare a propriedade da maneira normal. Não especifique a palavra-chave Shared ou Private.

  2. Inclua a palavra-chave Default na declaração de propriedade.

  3. Especifique pelo menos um parâmetro para a propriedade. Você não pode definir uma propriedade padrão que não tenha pelo menos um argumento.

    Default Property myProperty(ByVal index As Integer) As String
    

Para chamar uma propriedade padrão

  1. Declare uma variável do tipo de classe ou estrutura que a contém.

    Dim x As New class1(3)
    
  2. Use apenas o nome da variável em uma expressão em que você normalmente incluiria o nome da propriedade.

    MsgBox(x)
    
  3. Siga o nome da variável com uma lista de argumentos entre parênteses. Uma propriedade padrão deve ter pelo menos um argumento.

    MsgBox(x(1))
    
  4. Para recuperar o valor da propriedade padrão, use o nome da variável com uma lista de argumentos em uma expressão ou siga o sinal de igual (=) em uma instrução de atribuição.

    MsgBox(x(1) & x(2) & x(3))
    
  5. Para definir o valor da propriedade padrão, use o nome da variável com uma lista de argumentos no lado esquerdo de uma instrução de atribuição.

    x(1) = "Hello"
    x(2) = " "
    x(3) = "World"
    
  6. Você sempre pode especificar o nome da propriedade padrão junto com o nome da variável, assim como faria para acessar qualquer outra propriedade.

    x.myProperty(1) = "Hello"
    x.myProperty(2) = " "
    x.myProperty(3) = "World"
    

Exemplo 1

O exemplo a seguir declara uma propriedade padrão em uma classe.

Public Class class1
    Private myStrings() As String
    Sub New(ByVal size As Integer)
        ReDim myStrings(size)
    End Sub
    Default Property myProperty(ByVal index As Integer) As String
        Get
            ' The Get property procedure is called when the value
            ' of the property is retrieved.
            Return myStrings(index)
        End Get
        Set(ByVal Value As String)
            ' The Set property procedure is called when the value
            ' of the property is modified.
            ' The value to be assigned is passed in the argument 
            ' to Set.
            myStrings(index) = Value
        End Set
    End Property
End Class

Exemplo 2

O exemplo a seguir demonstra como chamar a propriedade padrão myProperty na classe class1. As três instruções de atribuição armazenam valores em myProperty, e a chamada MsgBox lê os valores.

Sub Test()
    Dim x As New class1(3)
    x(1) = "Hello"
    x(2) = " "
    x(3) = "World"
    MsgBox(x(1) & x(2) & x(3))
End Sub

O uso mais comum de uma propriedade padrão é a propriedade Item[] em várias classes de coleção.

Programação robusta

As propriedades padrão podem resultar em uma pequena redução nos caracteres de código-fonte, mas podem tornar seu código mais difícil de ler. Se o código de chamada não estiver familiarizado com sua classe ou estrutura, quando ele fizer uma referência ao nome de classe ou estrutura, ele não poderá ter certeza se essa referência acessa a própria classe ou estrutura ou se acessa uma propriedade padrão. Isso pode levar a erros de compilador ou erros de lógica de tempo de execução sutis.

Você pode reduzir um pouco a chance de erros de propriedade padrão usando sempre a Instrução Option Strict para definir a verificação de tipo do compilador como On.

Se você estiver planejando usar uma classe ou estrutura predefinida em seu código, deverá determinar se ela tem uma propriedade padrão e, se for o caso, qual é o nome dela.

Devido a essas desvantagens, você deveria considerar não definir propriedades padrão. Para legibilidade de código, você também deve considerar sempre se referir a todas as propriedades explicitamente, até mesmo propriedades padrão.

Confira também