Colaboraciones en el Guille

Ideología y Desarrollo de Clases .net

[segunda entrega: entendiendo las propiedades ReadOnly y WriteOnly]

Fecha: 26/Dic/2005 (26-12-05)
Autor:  Percy Reyes Paredes - [email protected]

            percy's blog      percy's artículos



¡De frente al grano!

Esta vez tan sólo deseo mostrarle un ejemplo, en donde se aprovecha la funcionalidad de trabajar con las propiedades de sólo lectura y sólo escritura. Pues bien el caso es el siguiente. Se nos plantea ahora un nuevo caso para una nueva clase Empleado: debemos guardar el valor del código de cuenta bancaria del empleado en el objeto, pero sin permitir que dicha información sea accesible desde el código cliente. Igualmente y en función de los primeros dígitos de la cuenta bancaria, necesitamos mostrar el nombre de la entidad, pero sin permitir al código cliente su modificación, ya que esta va a ser siempre una operación que debe calcular el código de la clase. Utilizando campos de clase no es posible resolver esta situación, ya que al ser de ámbito público, permiten tanto la escritura como
lectura de sus valores.
 

¿Qué se consigue con ReadOnly y WriteOnly?

Pero si empleamos propiedades, estas nos permiten la creación de las denominadas propiedades de sólo lectura o sólo escritura, en las que utilizando las palabras clave ReadOnly y WriteOnly, conseguimos que a una determinada propiedad, sólo podamos asginarle o recuperar su valor. Debido a esto, en una propiedad ReadOnly no podremos escribir el bloque Set, ya que no tendría sentido, puesto que no se va utilizar. Lo mismo podemos aplicar para una propiedad WriteOnly, y sólo que en esta, el bloque que no podremos codificar será Get. Igualmente obtendremos un error del compilador, si en el código cliente intentamos asignar un valor a una propiedad ReadOnly, u obtener un valor de una propiedad WriteOnly.

ahora sí, vamos con el código del ejemplo

El siguiente código fuente es un ejemplo de cómo resolver el problema comentado.
 

'definiendo la clase empleado
Public Class Empleado

    'campos de clase
    Public _Id As Integer
    Public _nombre As String
    Public _Remuneracion As Double
    Public _CostoHora As Integer
    Public _HorasTrabajadas As Integer

    'variables de propiedad
    Private _CtaBancaria As String
    Private _entidad As String
    Private _FechaIngreso As Date


    'propiedad de sólo escritura
    Public WriteOnly Property CtaBancaria() As String

         Set(ByVal Value As String)
                Select Case Microsoft.VisualBasic.Left(Value, 4)
                    Case "1111" : _entidad = "Banco De Crédito del Perú"
                    Case "2222" : _entidad = "Banco Continental"
                    Case "3333" : _entidad = "Caja Municipal de Trujillo"
                    Case Else : _entidad = "no existe entidad"
                End Select
         End Set

    End Property

        'propiedad de elctura y escritura
    Public Property FechaIngreso() As Date
         Get
            Return _FechaIngreso
         End Get
         Set(ByVal Value As Date)
                _FechaIngreso = Value
            End Set
   End Property

  'propiedad de sólo lectura
   Public ReadOnly Property Entidad() As String
        Get
           Return _entidad
        End Get
  End Property

  'propiedad virtual
  Public ReadOnly Property MesIngreso() As String

       Get
           Return Format(_FechaIngreso, "MMMM")
       End Get
        End Property

        'método que calcula y devuelve el sueldo
  Public Function Sueldo(ByVal horas As Integer)
        _Remuneracion = horas * _CostoHora
        Return _Remuneracion
  End Function
End Class

Este es el ejemplo en ejecución. Ingresamos los datos necesarios a registrar. Observe que luego de ingresar el número de la cuenta bancaria (propiedad de sólo escritura) y hacer darle click en registrar, abajo en el listview se muestra el respectivo nombre de la Entidad bancaria (propiedad de sólo lectura).
 

registrando datos

 

En este ejemplo falta la parte de validación de ID de empleado, pues no debe permitirse el ingreso de  empleados con el mismo ID, es decir, no debe existir IDs iguales. La implementación de esto queda como tarea para usted. El código fuente que ofrece la funcionalidad anterior es la siguiente:

Private Sub BtnAgregar_Click_1(ByVal sender As System.Object, ByVal e As System.EventArgs) _
    Handles BtnAgregar.Click
Try Dim oEmpleado As New Empleado oEmpleado.Id = TxtId.Text oEmpleado.nombre = TxtNombre.Text oEmpleado.CtaBancaria = CboCuenta.Text oEmpleado.FechaIngreso = TxtIngreso.Text oEmpleado.CostoHora = txtCostoHora.Text oEmpleado.HorasTrabajadas = Txthoras.Text oEmpleado.Remuneracion = oEmpleado.Sueldo(oEmpleado.HorasTrabajadas)
Dim vista As ListViewItem
vista = ListView1.Items.Add(oEmpleado.Id) vista.SubItems.Add(oEmpleado.nombre) vista.SubItems.Add(oEmpleado.Entidad) vista.SubItems.Add(oEmpleado.MesIngreso) vista.SubItems.Add(oEmpleado.HorasTrabajadas) vista.SubItems.Add(oEmpleado.CostoHora) vista.SubItems.Add(oEmpleado.Remuneracion)

Catch ex As Exception End Try End Sub

Espero haya entendido esta funcionalidad de las propiedades de sólo lectura y sólo escritura, además de ya saber para qué y cuando usarlo. He terminado de explicar esta segunda parte. Nos vemos en la siguiente entrega.

Microsoft Certified Professional
Estudiante Ing. de Sistemas
Universidad Nacional de Trujillo

Saludos desde Trujillo - Perú

Por favor, califica este artículo en Panoramabox, así me animarás a continuar colaborando contigo.


 

ir al índice principal del Guille