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:
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.