Compartir a través de


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

  1. 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.

  2. En el Explorador de soluciones, seleccione Persons.vb y en el menú Ver elija Código.

  3. 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
    
  4. 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
    
  5. 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

  1. 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
    
  2. 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
    
  3. 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

Otros recursos

Programar con objetos: utilizar clases