Declaración de variables de objeto (Visual Basic)

Utiliza una instrucción de declaración normal para declarar una variable de objeto. Para el tipo de datos, especifica Object (es decir, Object (Tipo de datos)) o una clase más específica a partir de la cual se crea el objeto.

Declarar una variable como Object es lo mismo que declararla como System.Object.

Cuando se declara una variable con una clase de objeto específica, ésta obtiene acceso a todos los métodos y propiedades de dicha clase y las clases de las que hereda. Si declara la variable con Object, puede tener acceso sólo a los miembros de la clase Object, a menos que cambie Option Strict Off para permitir el enlace en tiempo de ejecución.

Sintaxis de la declaración

Use la sintaxis siguiente para declarar una variable de objeto:

Dim variablename As [New] { objectclass | Object }

También puede especificar Public (Visual Basic), Protected (Visual Basic), Friend (Visual Basic), Protected Friend, Private (Visual Basic), Shared (Visual Basic) o Static (Visual Basic) en la declaración. Son válidas las siguientes declaraciones de ejemplo:

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

Enlace en tiempo de ejecución y enlace en tiempo de compilación

A veces la clase específica es desconocida hasta que se ejecuta el código. En este caso, debe declarar la variable de objeto con el tipo de datos Object, Esto crea una referencia general a cualquier tipo de objeto y se asigna la clase específica en tiempo de ejecución. Esto se llama enlace en tiempo de ejecución. El enlace en tiempo de ejecución requiere tiempo de ejecución adicional. También limita su código a los métodos y propiedades de la clase que le ha asignado recientemente. Esto puede producir errores en tiempo de ejecución si su código intenta tener acceso a miembros de una clase diferente.

Si conoce la clase específica en tiempo de compilación, declare la variable de objeto como miembro de dicha clase. Esto se llama enlace en tiempo de compilación. El enlace en tiempo de compilación mejora el rendimiento y garantiza el acceso de su código a todos los métodos y propiedades de la clase específica. En las declaraciones del ejemplo anterior, si la variable objA utiliza sólo objetos de clase System.Windows.Forms.Label, debe especificar As System.Windows.Forms.Label en su declaración.

Ventajas del enlace en tiempo de compilación

La declaración de una variable de objeto como una clase específica ofrece varias ventajas:

  • Comprobación automática de tipos

  • Acceso garantizado a todos los miembros de la clase específica

  • Compatibilidad con Microsoft IntelliSense en el Editor de código

  • Legibilidad mejorada de su código

  • Disminución del número de errores en el código

  • Errores detectados en tiempo de compilación en vez de en tiempo de ejecución

  • Aumento de la velocidad de ejecución del código

Acceso a los miembros de variables de objeto

Si Option Strict está en On, una variable de objeto sólo puede tener acceso a los métodos y propiedades de la clase con la que se ha declarado. Esto se ilustra en el siguiente ejemplo:

' 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

En este ejemplo, p puede utilizar sólo los miembros de la propia clase Object, que no incluyen la propiedad Left. Por otro lado, q se ha declarado con el tipo Label, así que puede utilizar todos los métodos y propiedades de la clase Label en el espacio de nombres System.Windows.Forms.

Flexibilidad de las variables de objeto

Cuando se trabaja con objetos en una jerarquía de herencia, existe la posibilidad de elegir la clase que se va a utilizar para declarar las variables de objeto. A la hora de tomar esta decisión, debe buscarse un equilibrio entre la flexibilidad de la asignación de objetos y el acceso a los miembros de una clase. Por ejemplo, si consideramos la jerarquía de herencia que conduce a la clase System.Windows.Forms.Form:

Object

    Component

      Control

        ScrollableControl

          ContainerControl

            Form

Supongamos que una aplicación define un clase de formulario denominado specialForm, que hereda de la clase Form. Puede declarar una variable de objeto que haga referencia específicamente a specialForm, como se muestra en el ejemplo siguiente:

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

La declaración del ejemplo anterior limita la variable nextForm a objetos de la clase specialForm, pero también pone todos los métodos y propiedades de specialForm a disposición de nextForm, así como todos los miembros de todas las clases de las que hereda specialForm.

Puede hacer que una variable de objeto sea más general si la declara de tipo Form, como se muestra en el ejemplo siguiente.

Dim anyForm As System.Windows.Forms.Form

La declaración del ejemplo anterior le permite asignar cualquier formulario de su aplicación a anyForm. Sin embargo, aunque anyForm pueda tener acceso a todos los miembros de la clase Form, no puede utilizar ninguno de los métodos o propiedades adicionales definidos para formularios específicos como specialForm.

Todos los miembros de una clase base están disponibles para las clases derivadas, pero los miembros adicionales de una clase derivada no están disponibles para la clase base.

Vea también

Tareas

Cómo: Declarar una variable de objeto y asignarle un objeto en Visual Basic

Cómo: Obtener acceso a los miembros de un objeto (Visual Basic)

Referencia

New (Operador, Visual Basic)

Option Strict (Instrucción)

Conceptos

Variables de objeto en Visual Basic

Asignación de variables de objeto (Visual Basic)

Valores de las variables de objeto (Visual Basic)

Programación sin tipos en Visual Basic

Inferencia de tipo de variable local (Visual Basic)