Constantes (Guía de programación de C#)Constants (C# Programming Guide)

Las constantes son valores inmutables que se conocen en tiempo de compilación y que no cambian durante la vida del programa.Constants are immutable values which are known at compile time and do not change for the life of the program. Las constantes se declaran con el modificador const.Constants are declared with the const modifier. Solo los tipos integrados de C# (excluido System.Object) pueden declararse como const.Only the C# built-in types (excluding System.Object) may be declared as const. Para obtener una lista de los tipos integrados, vea Tabla de tipos integrados.For a list of the built-in types, see Built-In Types Table. Los tipos definidos por el usuario, incluidas las clases, las estructuras y las matrices, no pueden ser const.User-defined types, including classes, structs, and arrays, cannot be const. Use el modificador readonly para crear una clase, una estructura o una matriz que se inicialice una vez en tiempo de ejecución (por ejemplo, en un constructor) y que posteriormente no se pueda cambiar.Use the readonly modifier to create a class, struct, or array that is initialized one time at runtime (for example in a constructor) and thereafter cannot be changed.

C# no admite métodos, propiedades ni eventos const.C# does not support const methods, properties, or events.

El tipo enum permite definir constantes con nombre para los tipos integrados enteros (por ejemplo, int, uint, long, etc.).The enum type enables you to define named constants for integral built-in types (for example int, uint, long, and so on). Para más información, vea enum.For more information, see enum.

Las constantes se deben inicializar al declararse.Constants must be initialized as they are declared. Por ejemplo:For example:

class Calendar1
{
    public const int Months = 12;
}

En este ejemplo la constante months siempre es 12 y ni siquiera la propia clase la puede cambiar.In this example, the constant months is always 12, and it cannot be changed even by the class itself. De hecho, cuando el compilador detecta un identificador de constante en el código fuente de C# (por ejemplo, months), sustituye directamente el valor literal en el código de lenguaje intermedio (IL) que genera.In fact, when the compiler encounters a constant identifier in C# source code (for example, months), it substitutes the literal value directly into the intermediate language (IL) code that it produces. Dado que no hay ninguna dirección de variable asociada a una constante en tiempo de ejecución, no se pueden pasar los campos const por referencia ni pueden aparecer como un valor L en una expresión.Because there is no variable address associated with a constant at run time, const fields cannot be passed by reference and cannot appear as an l-value in an expression.

Nota

Tenga cuidado al hacer referencia a valores de constante definidos en otro código como archivos DLL.Use caution when you refer to constant values defined in other code such as DLLs. Si una nueva versión del archivo DLL define un nuevo valor para la constante, el programa conservará el valor literal anterior hasta que se vuelva a compilar con la versión nueva.If a new version of the DLL defines a new value for the constant, your program will still hold the old literal value until it is recompiled against the new version.

Se pueden declarar varias constantes del mismo tipo a la vez, por ejemplo:Multiple constants of the same type can be declared at the same time, for example:

class Calendar2
{
    public const int Months = 12, Weeks = 52, Days = 365;
}

La expresión que se usa para inicializar una constante puede hacer referencia a otra constante si no crea una referencia circular.The expression that is used to initialize a constant can refer to another constant if it does not create a circular reference. Por ejemplo:For example:

class Calendar3
{
    public const int Months = 12;
    public const int Weeks = 52;
    public const int Days = 365;

    public const double DaysPerWeek = (double) Days / (double) Weeks;
    public const double DaysPerMonth = (double) Days / (double) Months;
}

Las constantes pueden marcarse como públicas, privadas, protegidas, internas, protegidas internaso privadas protegidas.Constants can be marked as public, private, protected, internal, protected internal or private protected. Estos modificadores de acceso definen cómo los usuarios de la clase pueden acceder a la constante.These access modifiers define how users of the class can access the constant. Para más información, vea Modificadores de acceso.For more information, see Access Modifiers.

A las constantes se accede como si fueran campos estáticos porque el valor de la constante es el mismo para todas las instancias del tipo.Constants are accessed as if they were static fields because the value of the constant is the same for all instances of the type. No use la palabra clave static para declararlas.You do not use the static keyword to declare them. Las expresiones que no están en la clase que define la constante deben usar el nombre de la clase, un punto y el nombre de la constante para acceder a ella.Expressions that are not in the class that defines the constant must use the class name, a period, and the name of the constant to access the constant. Por ejemplo:For example:

int birthstones = Calendar.Months;

Especificación del lenguaje C#C# Language Specification

Para obtener más información, consulte la Especificación del lenguaje C#.For more information, see the C# Language Specification. La especificación del lenguaje es la fuente definitiva de la sintaxis y el uso de C#.The language specification is the definitive source for C# syntax and usage.

Vea tambiénSee also