Compartilhar via


Declaração de variável do objeto (Visual Basic)

Você usa uma instrução de declaração normal para declarar uma variável de objeto. Para o tipo de dados, especifique Object (ou seja, o Tipo de dados de objeto) ou uma classe mais específica da qual o objeto será criado.

Declarar uma variável como Object é o mesmo que declará-la como System.Object.

Quando você declara uma variável com uma classe de objeto específica, ela pode acessar todos os métodos e propriedades expostos por essa classe e as classes das quais ela herda. Se você declarar a variável com Object, ela poderá acessar apenas os membros da classe Object, a menos que você se ative Option Strict Off para permitir a associação tardia.

Sintaxe da Declaração

Use a seguinte sintaxe para declarar uma variável de objeto:

Dim variablename As [New] { objectclass | Object }  

Você também pode especificar Pública, Protegida, Amiga, Protected Friend, Privada, Compartilhada ou Estática na declaração. As seguintes declarações de exemplo são válidas:

Private objA As Object  
Static objB As System.Windows.Forms.Label  
Dim objC As System.OperatingSystem  

Associação tardia e associação antecipada

Às vezes, a classe específica é desconhecida até que o seu código seja executado. Nesse caso, você deve declarar a variável de objeto com o tipo de dados Object. Isso cria uma referência geral a qualquer tipo de objeto e a classe específica é atribuída no tempo de execução. Isso é chamado de associação tardia. A associação tardia requer tempo de execução adicional. Ele também limita seu código aos métodos e propriedades da classe que você atribuiu mais recentemente a ele. Isso poderá causar erros em tempo de execução se o código tentar acessar membros de uma classe diferente.

Quando você conhece a classe específica no tempo de compilação, você deve declarar a variável de objeto como sendo dessa classe. Isso é chamado de associação inicial. A associação antecipada melhora o desempenho e garante o acesso de código a todos os métodos e propriedades da classe específica. Nas declarações de exemplo anteriores, se a variável objA usar apenas objetos de classe System.Windows.Forms.Label, você deverá especificar As System.Windows.Forms.Label na sua declaração.

Vantagens da associação inicial

Declarar uma variável de objeto como uma classe específica oferece várias vantagens:

  • Verificação automática de tipo

  • Acesso garantido a todos os membros da classe específica

  • Suporte do Microsoft IntelliSense no editor de códigos

  • Melhor legibilidade do seu código

  • Menos erros no seu código

  • Erros detectados no tempo de compilação em vez de no tempo de execução

  • Execução de código mais rápida

Acesso aos membros da variável de objeto

Quando Option Strict se torna On, uma variável de objeto pode acessar apenas os métodos e as propriedades da classe com a qual você a declara. O exemplo a seguir ilustra essa situação.

' Option statements must precede all other source file lines.  
Option Strict On  
' Imports statement must precede all declarations in the source file.  
Imports System.Windows.Forms  
Public Sub accessMembers()  
    Dim p As Object  
    Dim q As System.Windows.Forms.Label  
    p = New System.Windows.Forms.Label  
    q = New System.Windows.Forms.Label  
    Dim j, k As Integer  
    ' The following statement generates a compiler ERROR.  
    j = p.Left  
    ' The following statement retrieves the left edge of the label in pixels.  
    k = q.Left  
End Sub  

Neste exemplo, p pode usar apenas os membros da própria classe Object, que não incluem a propriedade Left. Por outro lado, q foi declarado como do tipo Label, portanto, ele pode usar todos os métodos e propriedades da classe Label no namespace System.Windows.Forms.

Flexibilidade das variáveis de objeto

Ao trabalhar com objetos em uma hierarquia de herança, você tem uma escolha de qual classe usar para declarar suas variáveis de objeto. Ao fazer essa escolha, você deve equilibrar a flexibilidade da atribuição de objeto em relação ao acesso aos membros de uma classe. Por exemplo, considere a hierarquia de herança que leva à classe System.Windows.Forms.Form:

Object

  MarshalByRefObject

    Component

      Control

        ScrollableControl

          ContainerControl

            Form

Suponha que seu aplicativo defina uma classe de formulário chamada specialForm, que herda da classe Form. Você pode declarar uma variável de objeto que se refere especificamente a specialForm, como mostra o exemplo a seguir.

Public Class specialForm  
    Inherits System.Windows.Forms.Form  
    ' Insert code defining methods and properties of specialForm.  
End Class  
Dim nextForm As New specialForm  

A declaração no exemplo anterior limita a variável nextForm a objetos de classe specialForm, mas também disponibiliza todos os métodos e propriedades de specialForm para nextForm, assim como para todos os membros de todas as classes das quais specialForm herda.

Você pode tornar uma variável de objeto mais geral declarando-a de tipo Form, como mostra o exemplo a seguir.

Dim anyForm As System.Windows.Forms.Form  

A declaração no exemplo anterior permite atribuir qualquer formulário em seu aplicativo a anyForm. No entanto, embora anyForm possa acessar todos os membros da classe Form, ele não pode usar nenhum dos métodos ou propriedades adicionais definidos para formulários específicos, como specialForm.

Todos os membros de uma classe base estão disponíveis para classes derivadas, mas os membros adicionais de uma classe derivada não estão disponíveis para a classe base.

Confira também