Introducción a C#
Por Nacho Cabanes, versión 0.93 de 16-abr-2010


(Nota: Estás viendo una versión del curso antigua, creada en 2009. Es recomendable que sigas la versión 2015, mucho más actualizada, con contenidos más detallados, más ejemplos y más ejercicios propuestos)

9.4. Propiedades

Hasta ahora estábamos siguiendo la política de que los atributos de una clase sean privados, y se acceda a ellos a través de métodos "get" (para leer su valor) y "set" (para cambiarlo). En el caso de C#, existe una forma alternativa de conseguir el mismo efecto, empleando las llamadas "propiedades", que tienen una forma abreviada de escribir sus métodos "get" y "set":

/*---------------------------*/
/*  Ejemplo en C#            */
/*  propiedades.cs           */
/*                           */
/*  Ejemplo de propiedades   */
/*                           */
/*  Introduccion a C#,       */
/*    Nacho Cabanes          */
/*---------------------------*/
 
using System;
 
public class EjemploPropiedades
{
 
  // -------------------------  
 
  // Un atributo convencional, privado
  private int altura = 0;
 
  // Para ocultar detalles, leemos su valor con un "get"
  public int GetAltura()
  {
    return altura;
  }
 
  // Y lo fijamos con un "set"
  public  void SetAltura(int nuevoValor)
  {
    altura = nuevoValor;
  }
 
 
  // -------------------------  
 
  // Otro atributo convencional, privado
  private int anchura = 0;
 
  // Oculto mediante una "propiedad"
  public int Anchura
  {
    get
    {
      return anchura;
    }
 
    set
    {
      anchura = value;
    }
  }
 
 
  // -------------------------
 
  // El "Main" de prueba
  public static void Main() 
  {
 
    EjemploPropiedades ejemplo 
      = new EjemploPropiedades();
 
    ejemplo.SetAltura(5);
    Console.WriteLine("La altura es {0}", 
      ejemplo.GetAltura() );
 
    ejemplo.Anchura = 6;
    Console.WriteLine("La anchura es {0}", 
      ejemplo.Anchura );
 
  }
}
 

Al igual que ocurría con las enumeraciones, ya hemos usado "propiedades" anteriormente, sin saberlo: la longitud ("Length") de una cadena, el tamaño ("Length") y la posición actual ("Position") en un fichero, el título ("Title") de una ventana en consola, etc.

Una curiosidad: si una propiedad tiene un "get", pero no un "set", será una propiedad de sólo lectura, no podremos hacer cosas como "Anchura = 4", porque el programa no compilaría. De igual modo, se podría crear una propiedad de sólo escritura, definiendo su "set" pero no su "get".

9.5. Parámetros de salida (out)

Hemos hablado de dos tipos de parámetros de una función: parámetros por valor (que no se pueden modificar) y parámetros por referencia ("ref", que sí se pueden modificar). Un uso habitual de los parámetros por referencia es devolver más de un valor a la salida de una función. Para ese uso, en C# existe otra alternativa: los parámetros de salida. Se indican con la palabra "out" en vez de "ref", y no exigen que las variables tengan un valor inicial:

public void ResolverEcuacionSegundoGrado ( 
          float a, float b, float c,
          out float x1, out float x2)