Pregunta

Ayúdame a resolver una discusión aquí.

Es esto:

SqlCommand cmd = new SqlCommand( "sql cmd", conn);

tratado exactamente igual que este:

const string s = "sql cmd";
SqlCommand cmd = new SqlCommand( s, conn);

Es decir. ¿Hace una diferencia si afirmo específicamente que la cadena s es un const?

Y, si no se trata de la misma manera, ¿por qué no?

¿Fue útil?

Solución

En el último fragmento, no es que el cuerda es const, es que el variable es const. Esto no es lo mismo que const en C ++. (Las cadenas son siempre inmutable en .net.)

Y sí, los dos fragmentos hacen lo mismo. La única diferencia es que en la primera forma tendrá una entrada de metadatos para s Además, y si la variable se declara en el nivel de tipo (en lugar de ser una variable local), entonces otros métodos también podrían usarla. Por supuesto, debido a la hora de la cadena si usa "SQL CMD" en otro lugar, solo tendrá una sola cadena objeto en la memoria ... pero si miras el tipo con reflexión, encontrarás el const como un campo en los metadatos con el segundo fragmento si se declara como un campo constante, y si es solo una variable local, estará en El archivo PDB si crea uno.

Otros consejos

El valor de un const Siempre se quema directamente en la persona que llama, por lo que sí, son idénticos.

Además, las cadenas de pasantes del compilador que se encuentran en el código fuente: un const es útil si está utilizando la misma cadena varias veces (puramente desde un ángulo de mantenimiento: el resultado es el mismo de cualquier manera).

the constructor of the SqlCommand will not "see" any difference, and will therefore act the same way.

Yes, those are exactly the same.

Yes, feel free to use Reflector to look at the assembly, const strings will be replaced with literal strings on compilation. I also have a blog post about this to safe you the work of using Reflector :)

I'm not 100% sure about this, but I'd bet it is the same.

const will just make sure you don't reassing the variable, but it's something that can be done at compile time.

Morover, strings are inmutable, so I don't think it will make any difference declaring the variable or not.

However, the definite prove would be studing the IL code generated in both cases.

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