Pregunta

Const se cuece en el código de cliente. Readonly no lo es. Pero const es más rápido. Puede ser sólo un poco sin embargo.

La cuestión no es, es cada vez cualquier escenario en el que se debe preferir const sobre readonly? O reformular, ¿no estamos prácticamente siempre mejor usar un readonly en lugar de un const (teniendo en cuenta lo anteriormente dicho hornear)?

¿Fue útil?

Solución

Creo que la única vez que "const" es apropiado es cuando hay una especificación que se está codificando en contra de que es más durable que el programa se está escribiendo. Por ejemplo, si va a implementar el protocolo HTTP, que tiene un elemento const para "GET" es apropiado debido a que nunca va a cambiar, y los clientes pueden ciertamente difícil que el código que en sus aplicaciones compiladas sin preocuparse de que tendrá que cambiar el valor más adelante.

Si hay alguna posibilidad de que usted necesita para cambiar el valor en futuras versiones, no utilice const.

Oh! Y nunca asuma const es más rápido que un campo de sólo lectura a menos que se haya medido. Hay optimizaciones JIT que pueden hacer lo que es en realidad exactamente lo mismo.

Otros consejos

Const vs de sólo lectura:

  

Una breve sinopsis sobre las diferencias   entre 'const' y 'sólo lectura' en C #:   'Const':

     
      
  • No puede ser estática.
  •   
  • El valor se evalúa en Tiempo Compilar.
  •   
  • Initiailized en la única declaración.
  •   
     

'sólo lectura':

     
      
  • puede ser cualquiera de los casos a nivel de o estática.
  •   
  • El valor se evalúa en tiempo de ejecución.
  •   
  • Puede ser inicializado en la declaración o por código en el constructor.
  •   

Corrección: los Estados const anterior no puede ser estática. Ese es un nombre inapropiado. No pueden tener la palabra clave estática aplicada porque ya son estáticos.

Así que se utiliza para la const elementos estáticos que desee evaluar en tiempo de compilación.

Puede utilizar un valor const como un ejemplo de una sentencia switch, fwiw.

de sólo lectura es útil cuando la inicialización no es sencillo.
const se puede utilizar cuando se está seguro del valor antes de que se compila.

En cierto modo, de sólo lectura es una constante de tiempo de ejecución y const es un valor constante de tiempo de compilación.

EDIT: Si nos fijamos en algo de código usando www.koders.com, se dará cuenta de que hay un uso de sólo lectura, donde podría haber sido utilizado const. Creo, la razón detrás de esto podría ser que es modificable en el constructor (si es necesario). En caso de const (especialmente pública), usted tiene la oportunidad de romper el código del cliente depende de su código.

Me normalmente sólo uso const para las cosas que sé que van a nunca como cambiar la velocidad de la luz en el vacío.

Yo prefiero sólo lectura para cosas que podrían potencialmente de cambio. De esta manera sólo necesita volver a compilar una DLL si ocurre un cambio. Una excepción a esta regla general es que si la variable es privado / protegido / a de usar su propia asamblea. En esos casos, es seguro de usar const.

const no se puede utilizar para las clases o estructuras (a excepción de las constantes de cadena y nulo, como el Sr. Skeet señaló), sólo para los tipos de valor y se accede a campos estáticos. El valor de una const se establece en tiempo de compilación y debe establecerse cuando se declara.

de sólo lectura se puede utilizar para cualquier cosa excepto enumeraciones y puede ser o bien un campo estático o instancia. El valor de una de sólo lectura se establece en tiempo de ejecución y se puede configurar de forma diferente dependiendo de lo que se llama al constructor.

He aquí una buena página para una visión general de la const, de sólo lectura y palabras clave static .

Usted debe preferir modificador que se ponen a prueba en tiempo de compilación más de modificador que se probó durante el tiempo de ejecución (en este contexto const más de sólo lectura). Y siempre se debe utilizar los modificadores que soportan la semántica que necesita. Si algo no está destinado a ser modificado -. Protegerla o alguien va a escribir algo a ella (por accidente o por ignorancia)

Debe utilizar const cada vez que puede establecer el valor en la declaración y no tiene que esperar a que el constructor.

A buen uso de const es para llaves de pares clave / valor. Por ejemplo, si usted todavía está utilizando AppSetting (en lugar de ApplicationSettings), que en realidad no tiene sentido carga el nombre de la clave de una opción de configuración. Si se utiliza en varios lugar, pegar la clave en un const.

Utilice const cuando sus campos son de tipo simple (número, booleano o cadena) nunca será cambiada y sus valores. Si cambia sus valores, el proyecto debe volver a compilar.

Utilice campos readonly cuando se inicializan de otra fuente (archivos, bases de datos u otros códigos, .etc.), Pero entonces no se pueden cambiar.

Utilice campos static readonly cuando que quieres que sean compartidos por todas las instancias .

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top