Propiedades predeterminadas

Propiedades predeterminadas

===

Propiedades predeterminadas

Una propiedad predeterminada o por defecto, es aquella que nos permite su manipulación omitiendo el nombre.

Para establecer una propiedad como predeterminada en una clase, la variable de propiedad asociada deberá ser un array, pudiendo crear sólo una propiedad predeterminada por clase.

Al declarar una propiedad por defecto, deberemos utilizar al comienzo de la sentencia de declaración, la palabra clave Default.

Para asignar y obtener valores de este tipo de propiedad, tendremos que utilizar el índice del array que internamente gestiona la propiedad. Pongamos como ejemplo el hecho de que el trabajo desempeñado por el empleado le supone realizar viajes a diferentes ciudades; para llevar un control de los viajes realizados, crearemos una nueva propiedad, que además será predeterminada. Veamos este ejemplo en el Código fuente 214.

Module General Sub Main() Dim loEmpleado As New Empleado() Dim liContador As Integer

' primero manejamos la propiedad predeterminada ' igual que una normal loEmpleado.Viajes(0) = "Valencia"

' aquí manipulamos la propiedad predeterminada ' sin indicar su nombre loEmpleado(1) = "Toledo"

For liContador = 0 To 1 Console.WriteLine("Visita: {0} - Ciudad: {1}", _ liContador, loEmpleado(liContador)) Next

Console.ReadLine() End Sub End Module

Public Class Empleado ' este es el array asociado a ' la propiedad predeterminada Private msViajes() As String

' declaración de la propiedad predeterminada Default Public Property Viajes(ByVal Indice As Integer) As String

Get ' para devolver un valor, empleamos ' el número de índice pasado ' como parámetro Return msViajes(Indice)

End Get

Set(ByVal Value As String) ' para asignar un valor a la propiedad, ' comprobamos primero si el array está vacío

' comprobar si el array está vacío, ' al ser el array también un objeto, ' utilizamos el operador Is

© Grupo EIDOS 17. Programación orientada a objeto (OOP)

If msViajes Is Nothing Then ReDim msViajes(0) Else ' si el array ya contenía valores, ' añadir un nuevo elemento ReDim Preserve msViajes(UBound(msViajes) + 1)

End If

' asignar el valor al array msViajes(Indice) = Value

End Set End Property

End Class

Código fuente 214

El uso de propiedades predeterminadas proporciona una cierta comodidad a la hora de escribir el código, sin embargo, si nos acostumbramos a especificar en todo momento las propiedades en el código, ganaremos en legibilidad.

Eliminación de la palabra clave Set para asignar objetos

Al lector procedente de versiones anteriores de VB le resultará, cuanto menos sorprendente, el hecho

de que ahora no se deba utilizar la palabra clave Set, para asignar un objeto a una variable. Este aspecto del lenguaje, viene motivado por las diferencias que en el tratamiento de las propiedades predeterminadas hace VB.NET respecto de las otras versiones.

En VB6, como no era obligatorio que la propiedad predeterminada de un objeto fuera un array, la única forma que tenía el lenguaje de saber si a una variable de objeto le estaban asignando una referencia de un objeto, o un valor a su propiedad predeterminada, era a través del uso de Set. Veamos el Código fuente 215.

' Esto es código VB6 ' ================== ' La variable txtCaja contiene un objeto TextBox, ' este objeto tiene la propiedad Text como predeterminada

' estas dos líneas son equivalentes, ' asignan valores a la propiedad Text txtCaja.Text = "coche" txtCaja = "tren"

' Si no dispusiéramos en VB6 de Set, en la ' siguiente línea no sabríamos si se está ' intentando asignar un valor a la propiedad Text ' o un nuevo objeto a la variable txtCaja = txtNuevaCaja ' esto produce error en VB6

' esto es lo correcto y nos indica que ' asignamos un nuevo objeto ' a la variable Set txtCaja = txtNuevaCaja

Código fuente 215

Programación con Visual Basic .NET © Grupo EIDOS

Debido a la restricción impuesta por VB.NET, que nos obliga a que las propiedades predeterminadas sean un array, el uso de Set deja de tener sentido, ya que siempre que hagamos referencia a una propiedad predeterminada tendremos que usar el índice de su array, generándose un código más claro y eliminando la incomodidad de usar Set para cada asignación de objetos a variables. Ver el Código fuente 216.

' esto es código VB.NET ' ===================== Dim loEmpleado As Empleado

' no utilizamos Set para asignar ' un objeto a una variable loEmpleado = New Empleado()

' como la propiedad predeterminada es un array, ' siempre debemos trabajar con sus índices loEmpleado.Viajes(0) = "Valencia" ' .... ' .... ' asignamos otro objeto Empleado a la variable ' sabemos claramente que es una asignación ' porque no estamos manejando el índice de la ' propiedad predeterminada del objeto loEmpleado = loOtroEmp

Código fuente 216.

Métodos y espacios de nombre