2009-05-09 20 views
37

Ho questo codice;Costanti statiche in C#

using System; 

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

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

Come posso rendere questa costante a disposizione da altre classi senza dover creare una nuova istanza di esso? (ad esempio, accedendo direttamente tramite Rapido.Constants.FrameworkName)

risposta

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

Penso che * questo * sia effettivamente il giusto modo di farlo. – Hemant

+1

Lo è! ......... –

+0

Scusa se stavo leggendo male. Ma perché lo faresti? Questa classe non conterrebbe effettivamente nulla. E se dovessi cambiare questo valore, dovresti ricompilare tutto. Sarebbe meglio che fosse un campo statico di sola lettura. –

28

Un const è già statico in quanto non può cambiare tra le istanze.

+0

Giusto ... quindi non capisco perché il balks compilatore quando si indicano esplicitamente come tale ... – Cuga

+0

Capisco che è il modo in cui è implementato . Sto chiedendo perché è fatto in quel modo. – Cuga

+11

Fare attenzione a non confondere const e static, significano cose diverse. const si riferisce al valore di un oggetto mentre static si riferisce al modo in cui viene allocata una memoria di articoli. Vedi http://stackoverflow.com/questions/842609/why-does-c-not-allow-const-and-static-on-the-same-line/842649#842649 –

11

Non è necessario dichiararlo come statico: la stringa di const pubblica è sufficiente.

+3

In effetti è un errore dichiararlo statico perché ciò implicherebbe che l'allocazione della memoria e l'inizializzazione del runtime debbano aver luogo, nessuno dei quali è necessario per una costante. –

-4

è anche possibile creare costante come segue:

public static readonly string kCustomTypeUID = @"CustomTypeUID";