2009-05-26 4 views

Respuesta

20

Este último es mejor - que significa que:

  • Esto no es una variable de instancia, por lo que no termina con una cadena de referencia redundante en todos los casos que se crea
  • Ganaste no se puede cambiar la variable (que presumiblemente no desea)

Hay otros efectos de "const" en términos de acceso de otros ensamblados y versiones, pero parece que esto es campo privado, por lo que no debería ser un problema. Puede mayoría pensar en ello como ser:

static readonly string sQuery = ...; 

En general creo que es una buena idea para hacer que los campos estáticos cuando se puede (si es que no varía por ejemplo, ¿por qué debería ser una variable de instancia ?) y de solo lectura cuando puede (los datos mutables son más difíciles de razonar). Avíseme si desea que ingrese los detalles de las diferencias entre static readonly y const.

+0

por favor, continúe para explicar sus diferencias. (Gracias a partir de ahora) – uzay95

+0

¿Y qué crees que usa const/readonly en las funciones? – uzay95

+0

http://stackoverflow.com/questions/410723/is-there-a-difference-between-private-const-and-private-readonly-variables-in-c podría arrojar algo de luz –

1

ReSharper solo sugiere esto si la referencia de cadena en particular nunca cambia. En ese caso, usted expresa su intención usando const string en lugar de solo string.

1

Hace esto porque si asigna accidentalmente un nuevo valor a sQuery en su código, si es un const obtendrá un error de compilación, por lo que detectará un error en tiempo de compilación. Lo mismo con su sugerencia de hacer que las variables miembro que se establecen en el ctor solo sean de solo lectura

3

Si la cadena nunca cambia y nunca se usa fuera de su ensamblaje, entonces const es una buena idea. Si nunca cambia pero es usado fuera de su ensamblaje, el solo lectura estática podría ser una mejor idea: las constelaciones se "graban" en el sitio de la llamada, no se almacenan en una ubicación, por lo que recompilar el ensamblado que contiene la const no actualiza los ensamblajes dependientes, también tienen que recompilarse. las variables estáticas de solo lectura se actualizan en ensamblajes dependientes.

+0

"fuera de su ensamblaje, es posible que la lectura estética sea una mejor idea" ¿Por qué?
Incluso si quieren cambiar "static sQuery" o "static readonly sQuery", nada cambiará. ? . – uzay95

+0

Readonly garantiza que no intenta reasignar a él, y las variables estáticas son todavía variables (a diferencia de consts), por lo que si cambia la cadena en el ensamblaje donde se define, las actualizaciones se propagan a los ensamblajes dependientes. Esto no ocurre cuando cambia un const, a menos que recompile los ensamblados dependientes también. – Rytmis

+1

Tenga en cuenta que si se trata de una variable local en lugar de un campo, esto no es aplicable. :) – Rytmis

Cuestiones relacionadas