constimplica static(no necesita una instancia para hacer referencia al constvalor).
También quiero agregar este punto importante: cuando vincula (hace referencia) a un ensamblado con a public const, ese valor se copia en su ensamblaje. Entonces, si el constvalor en el ensamblado al que se hace referencia cambia, su ensamblado aún tendrá el valor compilado originalmente.
Si este comportamiento no es aceptable, debería considerar convertir el campo en un public static readonlycampo.
Foo.HATS // This will always be 42 even if the value in Lib.dll changes,// unless App.exe is recompiled.Foo.GLOVES // This will always be the same as Foo.GLOVES in Lib.dll
No cree una constante para representar información que espera cambiar en cualquier momento. Por ejemplo, no use un campo constante para almacenar el precio de un servicio, el número de versión de un producto o el nombre de marca de una empresa. Estos valores pueden cambiar con el tiempo y debido a que los compiladores propagan constantes , será necesario volver a compilar otro código compilado con sus bibliotecas para ver los cambios.
DLL. Cuando utiliza un constcampo o una declaración, el compilador de C # incrusta el constvalor de la variable directamente en el código IL. Por lo tanto, esencialmente borra el constcomo una entidad separada.
Precaución: Si los programas que dependen de a constno se constvuelven a compilar después de que cambia el valor, pueden romperse [ porque seguirán usando el valor anterior ].
@ BasheerAL-MOMANI: No. Una final simplemente no se puede cambiar después de la llamada al constructor. Nada mas.
juergen d
9
No puede tener una constante estática. Intente readonly en lugar de const o simplemente elimine el "estático" ya que "const" es estático implícito de todos modos.
Las constantes no se pueden reemplazar en el código durante la compilación, no en el tiempo de ejecución, por lo que no hay requisitos para las definiciones estáticas frente a las de instancia.
Todas las declaraciones de constantes son implícitamente estáticas, y la especificación C # establece que la inclusión (redundante) del modificador estático está prohibida. Creo que esto es para evitar la confusión que podría ocurrir si un lector viera dos constantes, una declarada estática y la otra no; fácilmente podrían asumir que la diferencia en la especificación implica una diferencia en la semántica. Dicho esto, no existe ninguna prohibición de especificar de forma redundante un modificador de acceso que también es el predeterminado, donde hay una opción. Por ejemplo, un método (concreto) se puede marcar explícitamente como privado a pesar de que sea el predeterminado. La regla parece ser que cuando no hay elección (por ejemplo, una declaración de método en una interfaz), el modificador redundante está prohibido. Donde hay una opción, está permitido.
Respuestas:
constimplicastatic(no necesita una instancia para hacer referencia alconstvalor).También quiero agregar este punto importante: cuando vincula (hace referencia) a un ensamblado con a
public const, ese valor se copia en su ensamblaje. Entonces, si elconstvalor en el ensamblado al que se hace referencia cambia, su ensamblado aún tendrá el valor compilado originalmente.Si este comportamiento no es aceptable, debería considerar convertir el campo en un
public static readonlycampo.Lib.dll, proporcionado como binario:
App.exe, hace referencia a Lib.dll:
Desde MSDN :
Desde DotNetPerls :
fuente
Una constante es estática por definición.
fuente
No puede tener una constante estática. Intente readonly en lugar de const o simplemente elimine el "estático" ya que "const" es estático implícito de todos modos.
fuente
Las constantes no se pueden reemplazar en el código durante la compilación, no en el tiempo de ejecución, por lo que no hay requisitos para las definiciones estáticas frente a las de instancia.
fuente
Todas las declaraciones de constantes son implícitamente estáticas, y la especificación C # establece que la inclusión (redundante) del modificador estático está prohibida. Creo que esto es para evitar la confusión que podría ocurrir si un lector viera dos constantes, una declarada estática y la otra no; fácilmente podrían asumir que la diferencia en la especificación implica una diferencia en la semántica. Dicho esto, no existe ninguna prohibición de especificar de forma redundante un modificador de acceso que también es el predeterminado, donde hay una opción. Por ejemplo, un método (concreto) se puede marcar explícitamente como privado a pesar de que sea el predeterminado. La regla parece ser que cuando no hay elección (por ejemplo, una declaración de método en una interfaz), el modificador redundante está prohibido. Donde hay una opción, está permitido.
fuente