Cuando intento compilar mi clase me sale un error:
La constante
'NamespaceName.ClassName.CONST_NAME'
no se puede marcar como estática.
en la línea:
public static const string CONST_NAME = "blah";
Podría hacer esto todo el tiempo en Java. ¿Qué estoy haciendo mal? ¿Y por qué no me deja hacer esto?
De la especificación del lenguaje C # (PDF página 287 - o página 300 del PDF):
fuente
El compilador considera que un miembro constante está estático, lo que implica una semántica de valor constante, lo que significa que las referencias a la constante podrían compilarse en el código de uso como el valor del miembro constante, en lugar de una referencia al miembro.
En otras palabras, un miembro const que contiene el valor 10, podría compilarse en un código que lo usa como el número 10, en lugar de una referencia al miembro const.
Esto es diferente de un campo de solo lectura estático, que siempre se compilará como referencia al campo.
Tenga en cuenta que esto es pre-JIT. Cuando el JIT'ter entra en juego, podría compilar ambos en el código de destino como valores.
fuente
C #
const
es exactamente lo mismo que Javafinal
, excepto que es absolutamente siemprestatic
. En mi opinión, no es realmente necesario que unaconst
variable sea non-static
, pero si necesita acceder a unaconst
variable de manera no-static
simple, puede hacer lo siguiente:Bueno, ahora me doy cuenta de que esta pregunta se hizo hace 4 años, pero dado que puse alrededor de 2 horas de trabajo, que consiste en probar todo tipo de formas diferentes de respuesta y formato de código, en esta respuesta, todavía la estoy publicando. :)
Pero, para que conste, todavía me siento un poco tonto.
fuente
final
comporta exactamente como C #readonly
, y no comoconst
en absoluto.Desde MSDN: http://msdn.microsoft.com/en-us/library/acdd6hb7.aspx
... Además, aunque un campo constante es una constante de tiempo de compilación , el campo de solo lectura se puede usar para constantes de tiempo de ejecución ...
Por lo tanto, usar static en const fields es como tratar de hacer una estática definida (con #define) en C / C ++ ... Dado que se reemplaza con su valor en tiempo de compilación, por supuesto, se inicia una vez para todas las instancias (= static) .
fuente
const es similar a static, podemos acceder a ambas variables con el nombre de la clase, pero diff es que las variables estáticas se pueden modificar y const no.
fuente