Agregar propiedades a una clase
Actualización: noviembre 2007
En esta lección, aprenderá a agregar propiedades a la clase que creó en la lección anterior.
En una lección anterior, Información detallada: comprender propiedades, métodos y eventos, aprendió que todos los objetos tienen atributos y que las propiedades representan atributos. En esa lección creó una clase Persons que representa una persona; las personas tienen atributos como el nombre y la edad, por lo que la clase Persons necesita propiedades que representen dichos atributos.
Se pueden agregar propiedades a una clase de dos maneras: como campo o como procedimiento de propiedad. También puede determinar cómo funciona una propiedad utilizando los modificadores Public, ReadOnly o WriteOnly.
Campos y procedimientos de propiedad
Los campos son variables públicas dentro de una clase que se pueden establecer o leer desde fuera de la clase. Resultan de utilidad para propiedades que no se tienen que validar, por ejemplo, un valor Boolean (True o False). En el caso de la clase Persons, se puede tener una propiedad Boolean denominada Married, que especifica si una persona está soltera o casada. Puesto que hay sólo dos valores posibles, un campo funciona bien para esta propiedad.
Para agregar un campo a una clase, el código podría ser como el que sigue.
Public Married As Boolean
La mayoría de las propiedades, sin embargo, son más complejas; en la mayor parte de los casos deseará utilizar un procedimiento de propiedad para agregar una propiedad a una clase. Los procedimientos de propiedad tienen tres partes: una declaración de una variable privada para almacenar el valor de la propiedad; un procedimiento Get que expone el valor; y un procedimiento Set que, como indica su nombre, establece el valor.
Por ejemplo, un procedimiento de propiedad para una propiedad Name de la clase Persons podría ser como el que sigue.
Private nameValue As String
Public Property Name() As String
Get
Name = nameValue
End Get
Set(ByVal value As String)
nameValue = value
End Set
End Property
La primera línea de código declara una variable String privada, nameValue que almacenará el valor de la propiedad. El procedimiento de propiedad en sí comienza con Public Property y termina con End Property.
El procedimiento Get contiene el código que se ejecutará cuando desee leer su valor; por ejemplo, si lee la propiedad Persons.Name, el código devolverá el valor almacenado en la variable nameValue.
El procedimiento Set contiene código que se utiliza para asignar un nuevo valor a la variable nameValue usando un valor pasado como argumento value. Por ejemplo, si escribió el código Persons.Name = "John", el valor StringJohn se pasará como argumento value; el código del procedimiento Set lo asignará a la variable NameValue para su almacenamiento.
Se preguntará por qué complicarse tanto en lugar de utilizar un campo que represente la propiedad Name. En el mundo real, hay ciertas reglas para los nombres: por ejemplo, los nombres normalmente no contienen números. Puede agregar código al procedimiento Set para comprobar el argumento value y devolver un error si contiene números.
En el siguiente procedimiento, se agregará un campo y tres propiedades a la clase Persons.
Inténtelo
Para agregar propiedades a la clase
Abra el proyecto Persons que creó en la lección anterior. Si no lo guardó, primero deberá regresar a la lección anterior, Modelar un objeto en una situación real: crear la primera clase, y realizar hasta el final los procedimientos de esa lección.
En el Explorador de soluciones, seleccione Persons.vb y en el menú Ver elija Código.
Agregue el siguiente código de declaración debajo de la línea Public Class Persons.
Private firstNameValue As String Private middleNameValue As String Private lastNameValue As String Public Married As Boolean
Agregue los siguientes procedimientos de propiedad debajo del código de declaración.
Public Property FirstName() As String Get FirstName = firstNameValue End Get Set(ByVal value As String) firstNameValue = value End Set End Property Public Property MiddleName() As String Get MiddleName = middleNameValue End Get Set(ByVal value As String) middleNameValue = value End Set End Property Public Property LastName() As String Get LastName = lastNameValue End Get Set(ByVal value As String) lastNameValue = value End Set End Property
En el menú Archivo, elija Guardar todo para guardar el trabajo.
Propiedades de sólo lectura y escritura
A veces una propiedad se establece una vez y no cambia nunca durante la ejecución del programa. Por ejemplo, una propiedad que representa un número de empleado nunca debe cambiar, de modo que otro programa lo puede leer, pero no se permitirá que ese programa cambie su valor.
La palabra clave ReadOnly se utiliza para especificar que un valor de propiedad se puede leer pero no modificar. Si intenta asignar un valor a una propiedad ReadOnly, aparecerá un error en el Editor de código.
Para crear una propiedad de sólo lectura, deberá crearse un procedimiento de propiedad con un procedimiento Get, pero sin procedimiento Set, tal como se muestra a continuación.
Private IDValue As Integer
ReadOnly Property ID() As Integer
Get
ID = IDValue
End Get
End Property
De igual forma, la palabra clave WriteOnly permite establecer un valor de propiedad pero no permite que se lea; por ejemplo, no permite que otros programas lean una propiedad de contraseña. Puede utilizar ese valor para realizar acciones dentro de la clase, pero deseará que siga siendo privado.
Para crear una propiedad de sólo escritura, se creará una propiedad con un procedimiento Set pero sin procedimiento Get, tal como se muestra a continuación.
Private passwordValue As String
WriteOnly Property Password() As String
Set(ByVal value As String)
passwordValue = value
End Set
End Property
Los procedimientos de propiedad ReadOnly y WriteOnly también son útiles cuando se desea tomar un valor de propiedad y convertirlo en un valor diferente. Por ejemplo, pensemos en la edad de una persona. A diferencia del nombre, la edad cambia con el tiempo, si ha asignado la edad a una clase y la lee de nuevo un año después, sería incorrecta.
En la clase Persons, puede evitarlo agregando dos propiedades: una propiedad WriteOnlyBirthYear que representa el año de nacimiento, que nunca cambia, y una propiedad ReadOnlyAge que devuelve un valor calculando la diferencia entre el año en curso y el año de nacimiento.
Inténtelo
Para agregar propiedades ReadOnly y WriteOnly a la clase
Agregue el siguiente código de declaración debajo de las otras declaraciones en la parte superior del módulo de clase.
Private birthYearValue As Integer
Agregue los siguientes procedimientos de propiedad debajo del código de declaración.
WriteOnly Property BirthYear() As Integer Set(ByVal value As Integer) birthYearValue = value End Set End Property ReadOnly Property Age() As String Get Age = My.Computer.Clock.LocalTime.Year - birthYearValue End Get End Property
En el menú Archivo, elija Guardar todo para guardar el trabajo.
Pasos siguientes
En esta lección, obtuvo información sobre las propiedades y las diferentes maneras de agregarlas a la clase. En la siguiente lección, aprenderá a agregar métodos a la clase para que pueda realizar acciones.
Próxima lección: Agregar métodos a una clase
Vea también
Tareas
Modelar un objeto en una situación real: crear la primera clase
Conceptos
Comparación de procedimientos de propiedades y campos