Compartilhar via


Instrução Property

Declara o nome de uma propriedade e os procedimentos de propriedade usados para armazenar e recuperar o valor da propriedade.

Sintaxe

[ <attributelist> ] [ Default ] [ accessmodifier ]
[ propertymodifiers ] [ Shared ] [ Shadows ] [ ReadOnly | WriteOnly ] [ Iterator ]
Property name ( [ parameterlist ] ) [ As returntype ] [ Implements implementslist ]
    [ <attributelist> ] [ accessmodifier ] Get
        [ statements ]
    End Get
    [ <attributelist> ] [ accessmodifier ] Set ( ByVal value As returntype [, parameterlist ] )
        [ statements ]
    End Set
End Property
- or -
[ <attributelist> ] [ Default ] [ accessmodifier ]
[ propertymodifiers ] [ Shared ] [ Shadows ] [ ReadOnly | WriteOnly ]
Property name ( [ parameterlist ] ) [ As returntype ] [ Implements implementslist ]

Partes

  • attributelist

    Opcional. Lista de atributos que se aplicam a essa propriedade ou procedimento Get ou Set. Veja Lista de atributo.

  • Default

    Opcional. Especifica que essa propriedade é a propriedade padrão para a classe ou estrutura na qual ela está definida. As propriedades padrão devem aceitar parâmetros, e podem ser definidas e recuperadas sem especificar o nome da propriedade. Se você declarar a propriedade como Default, não poderá usar Private na propriedade ou em qualquer um de seus procedimentos de propriedade. Para obter exemplos e diretrizes detalhadas, consulte Como declarar e chamar uma propriedade padrão no Visual Basic.

  • accessmodifier

    Opcional na instrução Property e em no máximo uma das instruções Get e instruções Set. Um dos seguintes pode ser feito:

    Consulte Níveis de acesso no Visual Basic.

  • propertymodifiers

    Opcional. Um dos seguintes pode ser feito:

  • Shared

    Opcional. Consulte Shared.

  • Shadows

    Opcional. Confira Sombras.

  • ReadOnly

    Opcional. Confira ReadOnly.

  • WriteOnly

    Opcional. Consulte WriteOnly.

  • Iterator

    Opcional. Consulte Iterator.

  • name

    Obrigatórios. Nome da propriedade. Consulte Nomes de Elementos Declarados.

  • parameterlist

    Opcional. Lista de nomes de variáveis locais que representam os parâmetros dessa propriedade e possíveis parâmetros adicionais do procedimento Set. As propriedades parametrizadas geralmente são usadas para criar indexadores ou propriedades padrão que permitem acesso semelhante à coleção. Consulte a lista de parâmetros e como declarar e chamar uma propriedade padrão no Visual Basic.

  • returntype

    Necessário se Option Strict for On. Tipo de dados do valor retornado por essa propriedade.

  • Implements

    Opcional. Indica que essa propriedade implementa uma ou mais propriedades, cada uma definida em uma interface implementada pela classe ou estrutura que contém essa propriedade. Consulte Instrução implementa.

  • implementslist

    Necessário se Implements for fornecido. Lista de propriedades sendo implementadas.

    implementedproperty [ , implementedproperty ... ]

    Cada implementedproperty tem a sintaxe e as partes a seguir:

    interface.definedname

    Parte Descrição
    interface Obrigatórios. Nome de uma interface implementada pela classe ou estrutura que contém essa propriedade.
    definedname Obrigatórios. Nome pelo qual a propriedade é definida em interface.
  • Get

    Opcional. Obrigatório se a propriedade estiver marcada ReadOnly. Inicia um procedimento de propriedade Get usado para retornar o valor da propriedade. A Get instrução não é usada com propriedades implementadas automaticamente.

  • statements

    Opcional. Bloco de instruções a serem executadas no procedimento Get ou Set.

  • End Get

    Encerra o procedimento de propriedade Get.

  • Set

    Opcional. Obrigatório se a propriedade estiver marcada WriteOnly. Inicia um procedimento de propriedade Set usado para retornar o valor da propriedade. A Set instrução não é usada com propriedades implementadas automaticamente.

  • End Set

    Encerra o procedimento de propriedade Set.

  • End Property

    Encerra a definição desta propriedade.

Comentários

A instrução Property apresenta a declaração de uma propriedade. Uma propriedade pode ter um procedimento Get (somente leitura), um procedimento Set(somente gravação) ou ambos (leitura-gravação). Você pode omitir o procedimento e Get ao usar uma propriedade implementada Set automaticamente. Para obter mais informações, consulte Propriedades implementadas automaticamente.

Você só pode usar Property no nível da classe. Isso significa que o contexto de declaração de uma variável precisa ser uma classe, estrutura, módulo, procedimento ou interface, e não pode ser um arquivo de origem, namespace, procedimento ou bloco. Para obter mais informações, consulte Contextos de declaração e níveis de acesso padrão.

Por padrão, as propriedades usam o acesso público. Você pode ajustar o nível de acesso de uma propriedade com um modificador de acesso na instrução Property e, opcionalmente, ajustar um dos procedimentos de propriedade a um nível de acesso mais restritivo. Para obter exemplos detalhados de níveis de acesso mistos, consulte Como declarar uma propriedade com níveis de acesso mistos.

O Visual Basic passa um parâmetro para o procedimento Set durante as atribuições de propriedade. Se você não fornecer um parâmetro para Set, o IDE (ambiente de desenvolvimento integrado) usa um parâmetro implícito chamado value. Esse parâmetro mantém o valor a ser atribuído à propriedade. Normalmente, você armazena esse valor em uma variável local privada e o retorna sempre que o procedimento Get é chamado.

Regras

  • Níveis de acesso mistos. Se você estiver definindo uma propriedade de leitura/gravação, opcionalmente poderá especificar um nível de acesso diferente para o procedimento Get ou o procedimento Set, mas não ambos. Se você fizer isso, o nível de acesso ao procedimento deverá ser mais restritivo do que o nível de acesso da propriedade. Por exemplo, se a propriedade for declarada Friend, você poderá declarar o procedimento SetPrivate, mas não Public.

    Se você estiver definindo uma propriedade ReadOnly ou WriteOnly, o procedimento de propriedade única (Get ou Set, respectivamente) representa toda a propriedade. Você não pode declarar um nível de acesso diferente para esse procedimento, pois isso definiria dois níveis de acesso para a propriedade.

  • Tipo de retorno. A instrução Property pode declarar o tipo de dados do valor que retorna. Você pode especificar qualquer tipo de dados ou o nome de uma enumeração, estrutura, classe ou interface.

    Se você não especificar returntype, a propriedade retornará Object.

  • Implementação. Se essa propriedade usar a palavra-chave Implements, a classe ou estrutura que a contém deverá ter uma instrução Implements imediatamente após a instrução Class ou Structure. A instrução Implements deve incluir cada interface especificada em implementslist. No entanto, o nome pelo qual uma interface define o Property (em definedname) não precisa ser o mesmo nome dessa propriedade (em name).

Comportamento

  • Retorno de um procedimento de propriedade. Quando o procedimento Get ou Set retorna ao código de chamada, a execução continua com a instrução após a instrução que a invocou.

    As instruções Exit Property e Return causam uma saída imediata de um procedimento de propriedade. Qualquer número de instruções Exit Property e Return podem aparecer em qualquer lugar no procedimento, e você pode misturar instruções Exit Property e Return.

  • Valor de retorno. Para retornar um valor de um procedimento Get, você pode atribuir o valor ao nome da propriedade ou incluí-lo em uma instrução Return. O exemplo a seguir atribui o valor retornado ao nome da propriedade quoteForTheDay e, em seguida, usa a instrução Exit Property a ser retornada.

    Private quoteValue As String = "No quote assigned yet."
    
    ReadOnly Property QuoteForTheDay() As String
        Get
            QuoteForTheDay = quoteValue
            Exit Property
        End Get
    End Property
    

    Se você usar Exit Property sem atribuir um valor a name, o procedimento Get retornará o valor padrão para o tipo de dados da propriedade.

    Ao mesmo tempo, a instrução Return atribui o valor de retorno do procedimento Get e sai do procedimento. O exemplo a seguir mostra a isso.

    Private quoteValue As String = "No quote assigned yet."
    
    ReadOnly Property QuoteForTheDay() As String
        Get
            Return quoteValue
        End Get
    End Property
    

Exemplo

O exemplo a seguir declara uma propriedade em uma classe.

Class Class1
    ' Define a local variable to store the property value.
    Private propertyValue As String
    ' Define the property.
    Public Property Prop1() As String
        Get
            ' The Get property procedure is called when the value
            ' of a property is retrieved.
            Return propertyValue
        End Get
        Set(ByVal value As String)
            ' The Set property procedure is called when the value
            ' of a property is modified.  The value to be assigned
            ' is passed in the argument to Set.
            propertyValue = value
        End Set
    End Property
End Class

Propriedades parametrizadas

O exemplo a seguir mostra como criar uma propriedade parametrizada, também chamada de indexador, que permite o acesso de matriz a uma coleção:

Class SampleCollection
    ' Define a local collection to store strings.
    Private items As New List(Of String)
    
    ' Define a parameterized property (indexer) for the collection.
    Default Public Property Item(ByVal index As Integer) As String
        Get
            ' Return the item at the specified index.
            If index >= 0 AndAlso index < items.Count Then
                Return items(index)
            Else
                Return Nothing
            End If
        End Get
        Set(ByVal value As String)
            ' Set the item at the specified index.
            If index >= 0 AndAlso index < items.Count Then
                items(index) = value
            ElseIf index = items.Count Then
                ' Allow adding new items at the end.
                items.Add(value)
            End If
        End Set
    End Property
    
    ' Add a Count property for convenience.
    Public ReadOnly Property Count As Integer
        Get
            Return items.Count
        End Get
    End Property
    
    ' Add method to add items.
    Public Sub Add(ByVal item As String)
        items.Add(item)
    End Sub
End Class

Para obter exemplos abrangentes de uso de propriedade, incluindo implementação automática, níveis de acesso mistos e cenários de validação, consulte Procedimentos de Propriedade.

Confira também

Tipos e recursos de propriedade

Cenários de propriedade avançada