variable property enum define constant c# const constants

property - static vs const c#



¿Por qué no puedo tener "public static const string S=" stuff "; en mi clase? (6)

Al intentar 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 MSDN: http://msdn.microsoft.com/en-us/library/acdd6hb7.aspx

... Además, mientras que un campo const es una constante de compilación , el campo de solo lectura se puede usar para constantes de tiempo de ejecución ...

Por lo tanto, usar estática en campos const es como intentar hacer una estática definida (con # definir) en C / C ++ ... Ya que se reemplaza con su valor en tiempo de compilación, por supuesto, se inicia una vez para todas las instancias (= estática) .


De la especificación de lenguaje C # (página 287 del PDF o página 300 del PDF):

Aunque las constantes se consideran miembros estáticos, una declaración constante no requiere ni permite un modificador estático.


El compilador considera que un miembro const es estático, además de implicar 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 puede 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 una referencia al campo.

Tenga en cuenta, esto es pre-JIT. Cuando el JIT''ter entra en juego, puede compilar ambos en el código objetivo como valores.


La const C # es exactamente lo mismo que la final de Java, excepto que es absolutamente siempre static . En mi opinión, no es realmente necesario que una variable const no sea static , pero si necesita acceder a una variable const no static , puede hacerlo:

class MyClass { private const int myLowercase_Private_Const_Int = 0; public const int MyUppercase_Public_Const_Int = 0; /* You can have the `private const int` lowercase and the `public int` Uppercase: */ public int MyLowercase_Private_Const_Int { get { return MyClass.myLowercase_Private_Const_Int; } } /* Or you can have the `public const int` uppercase and the `public int` slighly altered (i.e. an underscore preceding the name): */ public int _MyUppercase_Public_Const_Int { get { return MyClass.MyUppercase_Public_Const_Int; } } /* Or you can have the `public const int` uppercase and get the `public int` with a ''Get'' method: */ public int Get_MyUppercase_Public_Const_Int() { return MyClass.MyUppercase_Public_Const_Int; } }

Bueno, ahora me doy cuenta de que esta pregunta se formuló hace 4 años, pero dado que dediqué alrededor de 2 horas de trabajo, que consiste en probar todo tipo de formas diferentes de responder y formatear códigos, en esta respuesta, todavía la publico. :)

Pero, para que conste, todavía me siento un poco tonto.


Un objeto const es siempre static .


const es similar a static, podemos acceder a ambos varables con nombre de clase, pero diff es variables estáticas se pueden modificar y const no se pueden modificar.