Se nos plantea ahora un nuevo caso para nuestra 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.
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 asignarle 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 a utilizar.
Lo mismo podemos aplicar para una propiedad WriteOnly, 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.
Veamos a continuación, en el Código fuente 227, un ejemplo de cómo resolver el problema
comentado al comienzo de este apartado.Module General
Sub Main()
Dim loEmpleado As Empleado
loEmpleado = New Empleado()
loEmpleado.psNombre = "Pedro"
' a esta propiedad sólo podemos asignarle
' valor, si intentamos obtenerlo, se producirá
' un error
loEmpleado.CuentaBancaria = "2222-56-7779995555"
' en esta línea, la propiedad EntidadBancaria sólo
' nos permite obtener valor, si intentamos asignarlo
' se producirá un error
Console.WriteLine("La entidad del empleado {0} es {1}", _
loEmpleado.psNombre, loEmpleado.EntidadBancaria)
Console.ReadLine()
End Sub
End Module
Public Class Empleado
' campo de clase
Public psNombre As String
' variables de propiedad
Private msCtaBancaria As String
Private msEntidad As String
' variables diversas
Private msCodigoEntidad As String
' esta propiedad sólo permite asignar valores,
' por lo que no dispone de bloque Get
Public WriteOnly Property CuentaBancaria() As String
Set(ByVal Value As String)
Select Case Left(Value, 4)
Case "1111"
msEntidad = "Banco Universal"
Case "2222"
msEntidad = "Banco General"
Case "3333"
msEntidad = "Caja Metropolitana"
Case Else
msEntidad = "entidad sin catalogar"
End Select
End Set
End Property
' esta propiedad sólo permite obtener valores,
' por lo que no dispone de bloque Set
Public ReadOnly Property EntidadBancaria() As String
Get
Return msEntidad
End Get
End Property
End Class
Código fuente 227
No hay comentarios:
Publicar un comentario