Compartir a través de


Declaración de variable de objeto (Visual Basic)

Se usa una instrucción de declaración normal para declarar una variable de objeto. Para el tipo de datos, especifique Object (es decir, el tipo de datos de objeto) o una clase más específica a partir de la cual se va a crear el objeto.

Declarar una variable como Object es la misma que declararla como System.Object.

Al declarar una variable con una clase de objeto específica, puede tener acceso a todos los métodos y propiedades expuestos por esa clase y las clases de las que hereda. Si declara la variable con Object, solo puede acceder a los miembros de la clase Object, a menos que configure Option Strict Off para permitir el enlace tardío.

Sintaxis de declaración

Use la sintaxis siguiente para declarar una variable de objeto:

Dim variablename As [New] { objectclass | Object }  

También puede especificar Public, Protected, Friend, , Protected FriendPrivate, Shared o Static en la declaración. Las declaraciones de ejemplo siguientes son válidas:

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

Enlace en tiempo de ejecución y enlace anticipado

A veces, se desconoce la clase específica hasta que se ejecuta el código. En este caso, debe declarar la variable de objeto con el Object tipo de datos. Esto crea una referencia general a cualquier tipo de objeto y la clase específica se asigna en tiempo de ejecución. Esto se denomina vinculación tardía. La vinculación tardía requiere tiempo de ejecución adicional. También limita tu código a los métodos y propiedades de la clase que le has asignado más recientemente. Esto puede provocar errores en tiempo de ejecución si el código intenta acceder a miembros de una clase diferente.

Cuando conozca la clase específica en tiempo de compilación, debe declarar la variable de objeto para que sea de esa clase. Esto se denomina enlace anticipado. El enlace anticipado mejora el rendimiento y garantiza el acceso del código a todos los métodos y propiedades de la clase específica. En las declaraciones de ejemplo anteriores, si la variable objA usa solo objetos de clase System.Windows.Forms.Label, debe especificar As System.Windows.Forms.Label en su declaración.

Ventajas del enlace anticipado

Declarar una variable de objeto como una clase específica le 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 del código

  • Menos errores en el código

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

  • Ejecución de código más rápida

Acceso a miembros de variables de objeto

Cuando Option Strict se activa On, una variable de objeto solo puede tener acceso a los métodos y propiedades de la clase con la que se declara. 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 solo puede usar los miembros de la Object propia clase, que no incluyen la Left propiedad . Por otro lado, q se declaró como de tipo Label, por lo que puede usar todos los métodos y propiedades de clase Label en el espacio de nombres System.Windows.Forms.

Flexibilidad de variables de objeto

Al trabajar con objetos en una jerarquía de herencia, tiene una opción de qué clase usar para declarar las variables de objeto. Al elegir esta opción, debe equilibrar la flexibilidad de la asignación de objetos con respecto al acceso a los miembros de una clase. Por ejemplo, considere la jerarquía de herencia que conduce a la System.Windows.Forms.Form clase :

Object

  MarshalByRefObject

    Component

      Control

        ScrollableControl

          ContainerControl

            Form

Supongamos que la aplicación define una clase de formulario denominada specialForm, que hereda de la clase Form. Puede declarar una variable de objeto que hace 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 clase specialForm, pero también hace que todos los métodos y propiedades de specialForm estén disponibles para nextForm, así como todos los miembros de todas las clases de las que specialForm hereda.

Puede hacer que una variable de objeto sea más general declarando que es 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 la aplicación a anyForm. Sin embargo, aunque anyForm puede tener acceso a todos los miembros de la clase Form, no puede usar 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.

Consulte también