Declaración de variables de objeto (Visual Basic)
Se usa una instrucción de declaración normal para declarar una variable de objeto. Para el tipo de datos, se especifica 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 lo mismo que declararla como System.Object.
Al declarar una variable con una clase de objeto específica, se 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 se puede acceder 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, Protected, Friend, Protected Friend
, Private, 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 tipo de datos Object
. Esta operación crea una referencia general a cualquier tipo de objeto y la clase específica se asigna en tiempo de ejecución. A esto se le conoce como enlace en tiempo de ejecución. El enlace en tiempo de ejecución requiere tiempo de ejecución adicional. También limita el código a los métodos y propiedades de la clase que ha asignado más recientemente. Esto puede provocar errores en tiempo de ejecución si el código intenta acceder a los miembros de una clase diferente.
Cuando conozca la clase específica en tiempo de compilación, debe declarar la variable de objeto como 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 la 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 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 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 variable de objeto
Si Option Strict
se activa (On
), una variable de objeto solo puede acceder 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
puede usar solo 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 usar todos los métodos y propiedades de la 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 la opción de elegir qué clase usar para declarar las variables de objeto. Para elegir esta opción, debe equilibrar la flexibilidad de la asignación de objetos con el acceso a los miembros de una clase. Por ejemplo, considere la jerarquía de herencia que lleva a la clase System.Windows.Forms.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 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 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 hereda specialForm
.
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
- Variables de objeto
- Asignación de variables de objeto
- Valores de las variables de objeto
- Cómo: Declarar una variable de objeto y asignarle un objeto en Visual Basic
- Procedimiento para obtener acceso a los miembros de un objeto
- New Operator (Nuevo operador)
- Option Strict (instrucción)
- Inferencia de tipo de variable local