J'ai été à bosser sur un projet open source, ce week-end passé, quand je suis tombé sur un peu de code qui me troublait de rechercher l'utilisation de la 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):
Une 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, il fait un peu plus de sens parce que les constantes sont considérés comme des membres statiques, mais le reste de la phrase est un peu surprenant pour moi. Pourquoi est-ce qu' une 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?
En regardant 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?