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) oStatic (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 no se conoce 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, 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
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.
No hay comentarios:
Publicar un comentario