2010-09-10 6 views
3
public enum sEnum 
{ 
    zero = 0, one = 1 
} 

public int x; 

public static void a(sEnum s) 
{ 
    x = 3; 
    if (s == sEnum.one) ... 
} 

Pourquoi les valeurs de l'énumération peuvent-elles être vérifiées ici, car le mot-clé static n'est pas utilisé? Où est-ce documenté dans la spécification de la langue?Accès aux valeurs enum non statiques à partir des méthodes statiques

+0

Bien que la question ait été répondue mais que l'on souhaite dire une erreur, lorsque la fonction a est statique, alors comment affecter la valeur 3 au membre non statique x. Désolé de sortir du cadre de cette question, mais je ne pouvais pas m'empêcher de prendre note sur cette ligne de code. J'espère que cela ne vous dérangera pas. :) – necixy

Répondre

6

Les énumérations ne sont que des valeurs nommées, vous pouvez donc les utiliser dans un contexte statique, comme toute autre constante.

Section 3.4.3 des états de spécification du langage:

Les membres d'une énumération sont les constantes déclarées dans l'énumération

+1

"10.4: Même si les constantes sont considérées comme des membres statiques, une déclaration constante ne nécessite ni n'autorise un modificateur statique." combiné avec 3.4.3 fait une réponse satisfaisante. – seamast

+0

@seamast: Merci pour la mise à jour. –

2

Je pense que 14,3 dans les spécifications est ce que vous cherchez :

Les membres enum sont nommés et délimités d'une manière exactement analogue aux champs dans les classes. La portée d'un membre enum est le corps de son type enum contenant. Dans ce cadre, les membres de l'énumération peuvent être désignés par leur nom simple. De tout autre code, le nom d'un membre enum doit être qualifié avec le nom de son type enum. Les membres Enum n'ont aucune accessibilité déclarée - un membre enum est accessible si son type enum est accessible.

Questions connexes