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
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.
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.
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
@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
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
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