2009-05-09 38 views
37

Tengo este código;Constantes estáticas en C#

using System; 

namespace Rapido 
{ 
    class Constants 
    { 
     public static const string FrameworkName = "Rapido Framework"; 
    } 
} 

Visual Studio me dice: The constant 'Rapido.Constants.FrameworkName' cannot be marked static

Cómo puedo hacer que esta constante disponible de otras clases sin tener que crear una nueva instancia de la misma? (es decir, accediendo directamente a través de Rapido.Constants.FrameworkName)

Respuesta

95
public static class Constants 
{ 
    public const string FrameworkName = "Rapido Framework"; 
} 
+2

Creo que * este * es realmente el correcto forma de hacerlo. – Hemant

+1

¡Lo es! ......... –

+0

Lo siento, lo estaba leyendo mal. ¿Pero por qué harías esto? Esta clase efectivamente no contendría nada. Y si alguna vez cambiaras este valor, tendrías que recompilar todo. Sería mejor tener esto como un campo de solo lectura estático. –

28

Un const ya es estático, ya que no puede cambiar entre instancias.

+0

derecho ... así que no entiendo por qué las vigas del compilador cuando Usted indica explícitamente como tales ... – Cuga

+0

entiendo que esa es la forma en que se implementa . Estoy preguntando por qué se hace de esa manera. – Cuga

+11

Tenga cuidado de no confundir const y estática, significan cosas diferentes. const se refiere al valor de un elemento mientras que static se refiere a cómo se asigna el almacenamiento de elementos. Ver http://stackoverflow.com/questions/842609/why-does-c-not-allow-const-and-static-on-the-same-line/842649#842649 –

11

No es necesario declarar como estática - const string pública es suficiente.

+3

De hecho, es un error declararlo estático porque eso implicaría que la asignación de memoria y la inicialización del tiempo de ejecución deben tener lugar, ninguno de los cuales es necesario para una constante. –

-4

también puede crear constantes de la siguiente manera:

public static readonly string kCustomTypeUID = @"CustomTypeUID";