Constantes.

Hay dos tipos de constantes en C#, las constantes propiamente dichas y los campos de sólo lectura. Realmente los campos de sólo lectura no son constantes puramente en su concepto, pero al estudiarlas a continuación verás que casi las podemos encuadrar en el mismo conjunto que las primeras. En cualquier caso ambas son de gran utilidad, y con el tiempo apreciarás su funcionalidad y las insertarás profusamente en tu código fuente.

Las constantes.

Las constantes no son otra cosa que variables o campos de una clase que en su inicialización reciben un valor que no puede cambiar en ningún momento a lo largo de la ejecución del programa. Pongamos por ejemplo valores matemáticos constantes como PI, la constantes de gravitación universal, la constante de Planck, etc. Bien, dirás que cuándo vas a usar constantes como la de la gravitación universal ¿no?; pues bien, ahora piensa en cosas más cotidianas, como el número de los días de la semana, el número de horas de un día, el número de segundos en una hora... Son todos valores que no cambian bajo ningún concepto. La sintaxis de la declaración de una constante es el siguiente:

private const byte daysOnWeek = 7;

Hemos declarado una constante de nombre 'daysOnWeek' y la hemos inicializado con un valor de 7. Así, esta constante sóloo será visible dentro de la clase en la cual se ha declarado.

Es importante que tengas en cuenta tres reglas fundamentales:

1.- Deben ser declaradas dentro de su clase, pero no pueden ser declaradas dentro de un método.

2.- En el mismo momento de su declaración deben ser inicializadas con un valor.

3.- No pueden cambiar su valor en ningún momento de la ejecución del programa.

Campos de sólo lectura.

Los campos de sólo lectura se comportan de una manera muy similar a las constantes, pero con algunas diferencias. Los campos de sólo lectura también deben ser declaradas dentro de su clase y, al igual que las constantes, no pueden ser declaradas dentro de un método de esa clase. Sin embargo, no se les asigna un valor en ese mismo momento, sino que su valor se asigna dentro del constructor de su clase. Una vez asignado el valor, éste no puede cambiar en ningún momento. Veamos un ejemplo:

using System;
public class Program
{
    public static void Main()
    {
        Language spanish = new Language("es-ES");
        Language english = new Language("en-US");
    }
}
public class Language
{
    private readonly string languageCode;
    public Language(string lang)
    {
        languageCode = lang;
        switch (languageCode)
        {
            case "es-ES":
                Console.WriteLine("Idioma español.");
                break;
            case "en-US":
                Console.WriteLine("Idioma inglés.");
                break;
        }
        languageCode = "en-US"; // Error: el valor ya no puede cambiar en ningún sitio.
    }
}

Como ves, se han creado dos objetos de la clase 'Languages', y en cada uno de ellos el campo de sólo lectura ha adquirido dos valores diferentes en el constructor. Esos valores no pueden cambiar, pero sí que pueden tomar valores diferentes para cada objeto de esa clase. Eso es la principal diferencia con las constantes.