2010-10-14 4 views
0

Je sais que console.foregroundColor prend enum un paramètre ConsoleColor enum. Ce que je ne comprends pas, c'est pourquoi - je suppose que ce sont des chaînes de caractères, donc quand console.foreground le recevra comme argument, il utilisera une sorte de commutateur basé sur ces constantes. Est ce bien? Ou y a-t-il quelque chose que j'ai manqué?ConsoleColor enum question

Répondre

1

Enum a des valeurs entières et les valeurs réelles de ConsoleColor sont 0, 1, 2, 3 et ainsi de suite. De plus, comme leppie indique les valeurs de ConsoleColor réellement mappées aux valeurs de couleur natives. Dans la valeur de couleur native de la console - Les valeurs de premier plan sont placées dans les quatre bits inférieurs alors que les valeurs de l'arrière-plan vont dans les quatre bits supérieurs. Enum fournit une facilité d'utilisation et, par conséquent, la bibliothèque de frameworks a enveloppé les couleurs de console enum.

+0

Je ne comprends pas ce que vous voulez dire "mappé aux couleurs natives". Si chaque élément a son type intergral (son équivalent?), Alors qu'est-ce que ce mapping? – Ptr

+0

Par exemple, la valeur de ConsolColor.DarkBlue est 1 et la valeur correspondante de constante (dans l'API Windows) FOREGROUND_BLUE est également 1. Voir http://msdn.microsoft.com/en-us/library/ms682093(VS.85). aspx et http://msdn.microsoft.com/en-us/library/ms682088(v=VS.85).aspx#_win32_character_attributes pour comprendre les structures win api qui sont impliquées ici. – VinayC

2

La console ne prend en charge que 16 couleurs. Je peux seulement supposer que l'énumération est directement mappée aux constantes natives, donc elle ne nécessite pas de commutateur.

+0

Oui, mais s'il pouvait prendre une chaîne (comme "Black") en paramètre, ce serait la même chose, n'est-ce pas? Je veux dire, si enum ne contient que la liste des éléments, alors console.foreground doit être en quelque sorte distinct ce qui signifie quoi. – Ptr

+0

@Ptr, voir ma réponse. Comme le fait remarquer Leppie, en tant que valeur enum réelle correspond à la constante native, il n'y a pas besoin d'une instruction switch. Les énumérations sont des constantes d'entiers nommés sécurisés. – VinayC