À l'aide de consts dans les classes statiques

J'ai été à bosser sur un projet open source ce week-end passé, quand je suis tombé sur un peu de code qui me confond de rechercher l'utilisation dans les Spécification C# .

Le code en question est comme suit:

internal static class SomeStaticClass
{
    private const int CommonlyUsedValue = 42;

    internal static string UseCommonlyUsedValue(...)
    {
        //some code
        value = CommonlyUsedValue + ...;

        return value.ToString();
    }
}

J'ai été surpris parce que cela semble être un champ statique utilisé par une fonction statique qui d'une façon ou compilé très bien dans une classe statique!

La spécification des états (§10.4):

Constante déclaration peut inclure un
un ensemble d'attributs (§17), un nouveau
modificateur (§10.3.4), et valide
la combinaison des quatre accès
les modificateurs (§10.3.5). Les attributs
et les modificateurs s'appliquent à tous les
les membres déclarés par le
constant-déclaration. Même si
les constantes sont considérés comme statiques
membres, une constante de la déclaration de
ne nécessite ni ne permet une statique
modificateur.
C'est une erreur pour la même
modificateur d'apparaître plusieurs fois dans un
déclaration de constante.

Alors maintenant qu'elle fait un peu plus de sens parce que constantes sont considérés comme des membres statiques, mais le reste de la phrase est un peu surprenant pour moi. Pourquoi est-ce que constante déclaration ne nécessite ni ne permet une statique modificateur? Certes je ne connais pas les specs assez bien pour cela de faire sens, en premier lieu, mais pourquoi la décision de ne pas forcer constantes à utiliser le modificateur static si elles sont considérées comme statique?

À la recherche à la dernière phrase de ce paragraphe, je ne peux pas déterminer si c'est au sujet de la déclaration précédente, directement et il y a quelques implicite statique modificateur sur les constantes pour commencer, ou si il se dresse sur ses propres comme une autre règle pour les constantes. Quelqu'un peut-il m'aider à éclaircir ce point?

  • Peut-être qu'ils ont choisi de ne pas permettre à statique, car elle pourrait conduire à la confusion: quelqu'un va voir "static const foo..." croient, à tort, que statique en fait, fait une différence, ce qui implique que vous pouvez le supprimer et en quelque sorte un non-static const.
  • Vous obtenez un très décent compilateur message d'erreur lorsque vous essayez d'utiliser static et const ensemble. Je pense que c'est assez bon.
InformationsquelleAutor Nick Larsen | 2010-04-13