Para definir una propiedad se usa
la siguiente sintaxis:
< tipoPropiedad> <nombrePropiedad>
{
set
{
<códigoEscritura>
}
get
{
<códigoLectura>
}
}
Una propiedad así definida sería
accedida como si de un campo de tipo <tipoPropiedad>
se tratase, pero en cada lectura de su valor se ejecutaría el <códigoLectura> y en cada escritura de un valor
en ella se ejecutaría <códigoEscritura>
Al escribir los bloques de código
get
y set
hay que tener en cuenta que dentro del código set se puede hacer
referencia al valor que se solicita asignar a través de un parámetro especial
del mismo tipo de dato que la propiedad llamado value (luego nosotros
no podemos definir uno con ese nombre en <códigoEscritura>);
y que dentro del código get se ha de devolver siempre un objeto del tipo
de dato de la propiedad.
En realidad el orden en que
aparezcan los bloques de código set y get es irrelevante. Además, es posible definir
propiedades que sólo tengan el bloque get (propiedades
de sólo lectura) o que sólo tengan el bloque set (propiedades de sólo escritura) Lo que
no es válido es definir propiedades que no incluyan ninguno de los dos bloques.
Las propiedades participan del
mecanismo de polimorfismo igual que los métodos, siendo incluso posible definir
propiedades cuyos bloques de código get o set sean abstractos. Esto se haría prefijando el
bloque apropiado con un modificador abstract y sustituyendo la definición de su
código por un punto y coma. Por
ejemplo:
using
System;
abstract
class A
{
public
abstract int PropiedadEjemplo
{
set;
get;
}
}
class
B:A
{
private
int valor;
public override int PropiedadEjemplo
{
get
{
Console.WriteLine(“Leído
{0} de PropiedadEjemplo”, valor);
return valor;
}
set
{
valor
= value;
Console.WriteLine(“Escrito
{0} en PropiedadEjemplo”, valor);
}
}
}
En este ejemplo se ve cómo se
definen y redefinen propiedades abstractas. Al igual que abstract y override,
también es posible usar cualquiera de los modificadores relativos a herencia y
polimorfismo ya vistos: virtual, new y sealed.
Nótese que aunque en el ejemplo
se ha optado por asociar un campo privado valor
a la propiedad PropiedadEjemplo,
en realidad nada obliga a que ello se haga y es posible definir propiedades que
no tenga campos asociados. Es decir, una propiedad no se tiene porqué
corresponder con un almacén de datos.