2009-08-11 7 views
5

J'ai écrit du code sans réaliser pourquoi je peux accéder à des valeurs constantes dans les méthodes statiques.
Pourquoi une variable const est-elle disponible dans une méthode statique?

Pourquoi est-il possible d'accéder aux valeurs const sans le déclarer comme static?

Par ex) Il est légal d'appeler IMAGE_FILE_EXTENSION au sein AddImageToDocument(...)

public abstract class ImageDocumentReplacer : DocumentReplacer 
{ 
    private const string IMAGE_FILE_EXTENSION = ".tif"; 

    private static void AddImageToDocument(int documentId, string separatedPath) 
    { 
     Console.WriteLine(IMAGE_FILE_EXTENSION); 
    } 
} 

Répondre

17

const membres sont implicitement static. Ils appartiennent à la classe plutôt qu'à une instance spécifique. Par conséquent, vous ne pouvez pas utiliser this.myConstant mais MyClass.myConstant.

C spécification Citant # 3.0 (section §10.4 Constantes):

Même si constantes sont considérés comme static membres, une -déclaration constantene nécessite ni permet un modificateur static. C'est une erreur que le même modificateur apparaisse plusieurs fois dans une déclaration constante.

+2

Ajoutant simplement: Essayez d'utiliser static const, et votre compilateur va probablement se plaindre;) –

+0

@Samuel: Oui, siree il fait! – Sung

+0

Je n'ai jamais pensé que const était * implicitement * statique ... Merci Mehrdad. – Sung

1

Je m'attendrais à ce que, étant donné qu'une constante ne peut pas changer d'instance à instance, cela leur permet d'accéder en toute sécurité à partir d'une méthode statique.

2

Pourquoi cela ne serait-il pas possible? Puisque la valeur est fixée au moment de la compilation, il n'y a pas d'incohérence possible (comme avec des variables ou des champs readonly pouvant être initialisés à différentes valeurs pour différentes instances à l'exécution)