Compartilhar via


Propriedades autoimplementadas (Visual Basic)

As propriedades autoimplementadas permitem que você especifique rapidamente uma propriedade de uma classe, sem precisar gravar código na propriedade Get e Set. Quando você grava o código de uma propriedade autoimplementada, o compilador do Visual Basic cria automaticamente um campo privado para armazenar a variável de propriedade, além de criar os procedimentos Get e Set associados.

Com as propriedades implementadas automaticamente, uma propriedade, incluindo um valor padrão, pode ser declarada em uma única linha. O exemplo a seguir mostra três declarações de propriedade.

Public Property Name As String
Public Property Owner As String = "DefaultName"
Public Property Items As New List(Of String) From {"M", "T", "W"}
Public Property ID As New Guid()

Uma propriedade autoimplementada é equivalente a uma propriedade para a qual o valor da propriedade é armazenado em um campo privado. O exemplo de código a seguir mostra uma propriedade autoimplementada.

Property Prop2 As String = "Empty"

O exemplo de código a seguir mostra o código equivalente para o exemplo de propriedade autoimplementada anterior.

Private _Prop2 As String = "Empty"
Property Prop2 As String
    Get
        Return _Prop2
    End Get
    Set(ByVal value As String)
        _Prop2 = value
    End Set
End Property

O código a seguir mostra a implementação de propriedades somente leitura:

Class Customer  
   Public ReadOnly Property Tags As New List(Of String)  
   Public ReadOnly Property Name As String = ""  
   Public ReadOnly Property File As String  
  
   Sub New(file As String)  
      Me.File = file  
   End Sub  
End Class  

Você pode atribuir expressões de inicialização à propriedade, conforme mostrado no exemplo, ou pode atribuir às propriedades no construtor do tipo relativo. Você pode atribuir aos campos de suporte das propriedades somente leitura a qualquer momento.

Campos de Suporte

Quando você declara uma propriedade autoimplementada, o Visual Basic cria automaticamente um campo privado oculto chamado campo de suporte, para conter o valor da propriedade. O nome do campo de suporte é o nome da propriedade autoimplementada, precedido de um sublinhado (_). Por exemplo, se você declarar uma propriedade autoimplementada chamada ID, o campo de suporte será chamado de _ID. Se você incluir um membro da classe que também é chamado de _ID, produzirá um conflito de nomenclatura e o Visual Basic relatará um erro do compilador.

O campo de suporte também tem as seguintes características:

  • O modificador de acesso do campo de suporte é sempre Private, mesmo quando a própria propriedade tem um nível de acesso diferente, como Public.

  • Se a propriedade estiver marcada como Shared, o campo de suporte também será compartilhado.

  • Os atributos especificados para a propriedade não se aplicam ao campo de suporte.

  • O campo de suporte pode ser acessado a partir do código na classe e a partir de ferramentas de depuração, como a janela Inspeção. No entanto, o campo de suporte não é exibido em uma lista de preenchimento de palavras do IntelliSense.

Como inicializar uma propriedade autoimplementada

Qualquer expressão que possa ser usada para inicializar um campo é válida para inicializar uma propriedade autoimplementada. Quando você inicializa uma propriedade autoimplementada, a expressão é avaliada e passada para o procedimento Set da propriedade. Os exemplos de código a seguir mostram algumas propriedades autoimplementadas que incluem valores iniciais.

Property FirstName As String = "James"
Property PartNo As Integer = 44302
Property Orders As New List(Of Order)(500)

Não é possível inicializar uma propriedade autoimplementada que é membro de um Interfaceou que esteja marcada como MustOverride.

Ao declarar uma propriedade autoimplementada como membro de um Structure, você só pode inicializar a propriedade autoimplementada se ela estiver marcada como Shared.

Quando você declara uma propriedade autoimplementada como matriz, não é possível especificar limites de matriz explícitos. No entanto, você pode fornecer um valor usando um inicializador de matriz, conforme mostrado nos exemplos a seguir.

Property Grades As Integer() = {90, 73}
Property Temperatures As Integer() = New Integer() {68, 54, 71}

Definições de propriedade que exigem a sintaxe padrão

As propriedades autoimplementadas são práticas e viabilizam vários cenários de programação. No entanto, há situações em que você não pode usar uma propriedade autoimplementada e, em vez disso, deve usar a sintaxe de propriedade padrão ou expandida.

Você precisará usar a sintaxe expandida property-definition, se quiser fazer um destes procedimentos:

  • Adicionar código ao procedimento Get ou Set de uma propriedade, como o código para validar valores de entrada no procedimento Set. Por exemplo, talvez você queira verificar se uma cadeia de caracteres, que representa um número de telefone, contém os numerais necessários, antes de definir o valor da propriedade.

  • Especificar a acessibilidade diferente para o procedimento Get e Set. Por exemplo, talvez você queira fazer o Set procedimento Private e o Get procedimento Public.

  • Criar propriedades que sejam WriteOnly.

  • Use propriedades parametrizadas (incluindo propriedades Default). Você deve declarar uma propriedade expandida para especificar um parâmetro para a propriedade ou especificar parâmetros adicionais para o procedimento Set.

  • Coloque um atributo no campo de suporte ou altere o nível de acesso do campo de suporte.

  • Forneça comentários XML para o campo de suporte.

Como expandir uma propriedade autoimplementada

Se você precisar converter uma propriedade autoimplementada em uma propriedade expandida que contém um procedimento Get ou Set, o Editor de Código do Visual Basic pode gerar automaticamente os procedimentos Get e Set, bem como a instrução End Property para a propriedade. O código será gerado se você colocar o cursor em uma linha em branco, seguindo a instrução Property, digitar um G (para Get) ou um S (para Set) e pressionar ENTER. O Editor de Código do Visual Basic gera automaticamente o procedimento Get ou Set para propriedades somente leitura e somente gravação, quando você pressiona ENTER ao final de uma instrução Property.

Confira também