Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
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 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 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 :
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.