lunes, 2 de marzo de 2009

C#. Propiedades

Muchas veces nos puede interesar almacenar datos para después poder usarlos, y como vimos en el capitulo anterior, para esto usamos las variables. Pero, ¿Qué pasa si queremos aplicar algún tipo de lógica a estas variables? Me explico, imagina que quieres que el número máximo de vidas en tu juego sea cinco, y no quieres que nunca se puedan tener más de cinco vidas. Si tenemos una variable que almacene el número de vidas tendríamos algo como esto:
[code language="csharp"]
int vidas;
[/code]

Ahora cada vez que algún evento del juego sume una vida al total que ya tenemos, tendríamos que ir comprobando que no tengamos ya cinco vidas:
[code language="csharp"]
if(vidas < 5) vidas++;
[/code]
Esto lo tendremos que comprobar cada vez que queremos sumar una vida, es posible que en alguno de los eventos que suma una vida se nos olvide la comprobación, además de que es un poco “engorroso” tener que picar el código cada vez.
Para esto tenemos las propiedades, ya que entre otras cosas nos permite tener una lógica antes de obtener o asignar un valor.
Otras cosas que son de gran utilidad en las propiedades es que podemos hacerlas de lectura/escritura, solo lectura o solo escritura, y son perfectas para exponer de manera pública los valores de una clase.
Las propiedades se declaran dentro del bloque de clase especificando el nivel de acceso del campo, seguido por el tipo de la propiedad, seguido por el nombre de la propiedad y, a continuación, un bloque de código que declara el descriptor de acceso get y/o el descriptor de acceso set.
Vamos a ver un pequeño ejemplo para que lo veas claro:
[code language="csharp"]
Private Uint16 _vidas; //variable privada
Public Uint16 vidas
{
get{return _vidas;} set{_vidas = value;}
}
[/code]

El nivel de acceso es Public, por lo que todas las clases podrán acceder a esta propiedad, el tipo es UInt16, porque vamos a almacenar números pequeños sin decimales y positivos, y después tenemos los bloques de código get y set. El bloque de código get sirve para acceder al valor y el bloque de código set sirve para asignar el valor, si queremos hacer la propiedad solo de lectura pondremos solo el get y si la queremos hacer solo de escritura solo pondremos el set. El parámetro value está implícito en la propiedad y contendrá el valor que le asignemos, por lo tanto, si hacemos vidas = 1, el parámetro value vale uno.
Sigamos con el ejemplo del principio, lo que haríamos sería asignar la lógica a la propiedad de este modo:
[code language="csharp"]
Public Uint16 vidas
{
get{return _vidas;}
set
{
if(vidas < 5) _vidas++;
}
}
[/code]

Por lo tanto, aunque sumemos todas las veces del mundo las vidas, si ya se tienen cinco, estas no variaran.
Poco a poco iras viendo que las propiedades son algo muy utilizado en la programación de tus juegos, y si observas los códigos ya publicados podrás ver que se utilizan mucho, sobre todo para exponer valores a lo largo de las distintas clases del juego.
Ver ejemplos de propiedades.

No hay comentarios:

Publicar un comentario