define - enum c#
¿Cuándo, si alguna vez, deberíamos usar const? (9)
Const
está integrado en el código del cliente. Readonly
no lo es. Pero const
es más rápido. Aunque puede ser solo un poco
La pregunta es, ¿hay alguna vez un escenario en el que prefiera const
con readonly
? O para reformular, ¿no estamos prácticamente siempre mejor utilizando un readonly
lugar de un const
(teniendo en cuenta lo horneado arriba mencionado)?
Normalmente solo uso const para cosas que sé que nunca cambiarán, como la temperatura de congelación.
Prefiero leer solo las cosas que potencialmente podrían cambiar. De esta manera, solo necesito recompilar un dll si ocurre un cambio. Una excepción a esta regla de oro es si la variable es privada / protegida / amigable para su propio ensamblaje. En esos casos, es seguro usar const.
Creo que la única vez que "const" es apropiado es cuando hay una especificación contra la que estás codificando que es más duradera que el programa que estás escribiendo. Por ejemplo, si está implementando el protocolo HTTP, es apropiado tener un miembro const para "GET" porque eso nunca cambiará, y los clientes ciertamente pueden codificarlo en sus aplicaciones compiladas sin preocuparse de que tendrá que cambiar el valor más tarde.
Si hay alguna posibilidad de que deba cambiar el valor en futuras versiones, no use const.
Oh! Y nunca suponga que const es más rápido que un campo de solo lectura a menos que lo haya medido. Hay optimizaciones de JIT que pueden hacer que sea exactamente lo mismo.
Debe usar const siempre que pueda establecer el valor en la declaración y no tenga que esperar al constructor.
Debería preferir el modificador que se prueba en el tiempo de compilación sobre el modificador que se prueba durante el tiempo de ejecución (en este contexto, const sobre readonly). Y siempre debe usar los modificadores que soportan la semántica que necesita. Si algo no está destinado a ser modificado, protéjalo o alguien le escribirá algo (por accidente o por ignorancia).
Puede usar un valor de const como caso en una declaración de cambio, fwiw.
Un buen uso de const es para claves de pares clave / valor. Por ejemplo, si todavía está utilizando AppSetting (en lugar de ApplicationSettings), realmente no tiene sentido cargar el nombre de la clave en una configuración. Si se usa en varios lugares, pega la llave en una const.
const no se puede usar para clases o estructuras (a excepción de las constantes de cadena y nulo, como señaló el Sr. Skeet), solo para tipos de valores y se accede a ellos como campos estáticos. El valor de un const se establece en tiempo de compilación y debe establecerse cuando se declara.
readonly se puede usar para cualquier cosa excepto enumeraciones y puede ser un campo estático o de instancia. El valor de solo lectura se establece en tiempo de ejecución y se puede establecer de forma diferente según el constructor al que se llame.
Aquí hay una buena página para una descripción general de las palabras clave const, readonly y static.
readonly es útil cuando la inicialización no es directa.
const se puede usar cuando esté seguro del valor antes de compilarlo.
En cierto modo, readonly es un tiempo de ejecución const & const es un valor constante de tiempo de compilación.
EDITAR: Si mira un código usando www.koders.com, encontrará que hay un uso de readonly donde const podría haberse utilizado. Creo que la razón detrás de eso podría ser que es modificable en el constructor (si es necesario). En el caso de const (especialmente público), tiene la posibilidad de romper el código del cliente dependiendo de su código.
Una breve sinopsis de las diferencias entre ''const'' y ''readonly'' en C #: ''const'':
- No puede ser estático
- El valor se evalúa en tiempo de compilación.
- Iniciado solo en la declaración.
''solo lectura'':
- Puede ser a nivel de instancia o estático.
- El valor se evalúa en tiempo de ejecución.
- Se puede inicializar en declaración o por código en el constructor.
Corrección: los estados anteriores const no pueden ser estáticos. Ese es un nombre inapropiado. No pueden tener aplicada la palabra clave estática porque ya son estáticos.
Entonces usted usa const para elementos estáticos que quiere evaluar en tiempo de compilación.