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 (Object
ou 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:
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.