Ideología y Desarrollo de Clases .net[segunda entrega: entendiendo las propiedades ReadOnly y WriteOnly]Fecha: 26/Dic/2005 (26-12-05)
|
¡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 ClassEste 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).
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 SubEspero 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 TrujilloSaludos desde Trujillo - Perú
Por favor, califica este artículo en Panoramabox, así me animarás a continuar colaborando contigo.