2010-08-03 8 views
12

He notado la sugerencia de Resharper en "Prácticas comunes y mejoras del código": Convierta la variable local o campo a constante.¿Por qué Resharper prefiere las constras sobre readonly?

También he notado que en el libro de Bill Wagner "Effective C#: 50 Specific Ways to Improve Your C#" no es un lenguaje langauge "Prefiero de sólo lectura a const" en el que el autor explica los riesgos de usar consts.

Mi pregunta no es acerca de las diferencias entre readonly y const y cuándo usarlas, pero ¿por qué una fuente puso const como una práctica común/mejora de código y por otro lado la segunda trata solo como un idioma?

+4

Lea atentamente: "Mi pregunta no es sobre las diferencias entre readonly y const y cuándo usarlas" ... –

Respuesta

9

Las constantes privadas no conllevan los mismos riesgos que las constantes públicas. Resharper presumiblemente sugiere optimizaciones de rendimiento para los casos en que un campo no es visible externamente.

+1

Este es el punto clave aquí. No hay preocupación por la mantenibilidad con las constantes privadas, ya que nunca se pueden hornear directamente en ensamblajes externos. –

2

En mi experiencia con Resharper, obtendrá esta sugerencia si está estableciendo un valor de variable en la declaración, pero el valor de la variable nunca cambia a lo largo del método. En ese caso, puede convertirse en una constante local. También recibirá la advertencia sobre una variable de instancia que inicialice en su lugar, pero nunca cambie el valor en ningún lugar en el cuerpo de la clase.

Y el autor de ese libro básicamente hace el argumento de que al usar readonly en lugar de const, puede evitar tener que reconstruir ensamblajes dependientes si cambia el valor del valor readonly. Por el contrario, para un cambio a const, tendría que volver a compilar los ensamblados dependientes con la nueva versión del ensamblado con el const.

Es un argumento legítimo, sin embargo, si un valor no va a cambiar a lo largo de la vida de la aplicación, todavía creo que es mejor usar const. Me gusta usar readonly para los valores que estoy cargando desde una configuración, por ejemplo, que no cambiará después de ser inicializado en el constructor.

Creo que es mucho mejor tener la claridad de código que const proporciona a expensas de un poco más de mantenimiento de compilación.

+0

Me pregunta incluso al inicializar el campo readonly. –

+0

Sí, si el campo de solo lectura se declara como una variable de instancia y no cambia su valor en ninguna parte del código, recibirá esa advertencia. Y tiendo a estar de acuerdo con Resharper aquí en lugar de Bill Waggoner, por las razones que mencioné en mi edición. Pero Waggoner hace buenos puntos, es solo una cuestión de opinión. – dcp

Cuestiones relacionadas