Partilhar via


Declaração de variável de 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 (Objectou seja, o Tipo de Dados do Objeto) ou uma classe mais específica a partir da qual o objeto deve 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, a Object menos que você ative Option Strict Off para permitir a vinculação tardia.

Sintaxe da declaração

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

Dim variablename As [New] { objectclass | Object }  

Você também pode especificar Público, Protegido, Amigo, Protected Friend, Privado, Compartilhado ou Estático 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  

Vinculação tardia e vinculação antecipada

Às vezes, a classe específica é desconhecida até que seu código seja executado. Nesse caso, você deve declarar a variável de objeto com o tipo de Object dados. Isso cria uma referência geral a qualquer tipo de objeto, e a classe específica é atribuída em tempo de execução. Isso é chamado de vinculação tardia. A vinculaçã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 pode 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 em tempo de compilação, você deve declarar a variável de objeto como sendo dessa classe. A isto chama-se vinculação antecipada. A vinculação antecipada melhora o desempenho e garante o acesso ao código a todos os métodos e propriedades da classe específica. Nas declarações de exemplo anteriores, se a variável objA usa apenas objetos de classe System.Windows.Forms.Label, você deve especificar As System.Windows.Forms.Label em sua declaração.

Vantagens da vinculação antecipada

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

  • Verificação automática de tipos

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

  • Suporte ao Microsoft IntelliSense no Editor de Códigos

  • Melhor legibilidade do seu código

  • Menos erros no seu código

  • Erros detetados em tempo de compilação em vez de tempo de execução

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

Acesso a membros de variáveis de objeto

Quando Option Strict é ativada On, uma variável de objeto pode acessar apenas os métodos e propriedades da classe com a qual você a declara. O exemplo a seguir ilustra isso.

' 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 Object membros da própria classe, que não incluem a Left propriedade. Por outro lado, q foi declarado como sendo do tipo Label, para que possa usar todos os métodos e propriedades da Label classe no System.Windows.Forms namespace.

Flexibilidade de variáveis de objeto

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

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 torna todos os métodos e propriedades de specialForm disponíveis para nextForm, bem como todos os membros de todas as classes das quais specialForm herda.

Você pode tornar uma variável de objeto mais geral declarando-a do 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 adicionais ou propriedades definidas 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.

Consulte também