Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю - Страница 89
- Предыдущая
- 89/642
- Следующая
// Значения элементов в перечислении не обязательно должны// быть последовательными!enum EmpType{ Manager = 10, Grunt = 1, Contractor = 100, VicePresident = 9}Управление хранилищем, лежащим в основе перечисления
По умолчанию для хранения значений перечисления используется тип
System.Int32intbyteshortintlongEmpTypeEnumbyteint// На этот раз для элементов EmpTypeEnum используется тип byte.enum EmpTypeEnum : byte{ Manager = 10, Grunt = 1, Contractor = 100, VicePresident = 9}Изменение типа, лежащего в основе перечисления, может быть полезным при построении приложения .NET Core, которое планируется развертывать на устройствах с небольшим объемом памяти, а потому необходимо экономить память везде, где только возможно. Конечно, если в качестве типа хранилища для перечисления указан
byteEmpTypeEnumbyte// Ошибка на этапе компиляции! Значение 999 слишком велико для типа byte!enum EmpTypeEnum : byte{ Manager = 10, Grunt = 1, Contractor = 100, VicePresident = 999}Объявление переменных типа перечисления
После установки диапазона и типа хранилища перечисление можно использовать вместо так называемых "магических чисел". Поскольку перечисления — всего лишь определяемые пользователем типы данных, их можно применять как возвращаемые значения функций, параметры методов, локальные переменные и т.д. Предположим, что есть метод по имени
AskForBonus()EmpTypeEnumConsole.WriteLine("**** Fun with Enums *****");// Создать переменную типа EmpTypeEnum.EmpTypeEnum emp = EmpTypeEnum.Contractor;AskForBonus(emp);Console.ReadLine();// Перечисления как параметры.static void AskForBonus(EmpTypeEnum e){ switch (e) { case EmpType.Manager: Console.WriteLine("How about stock options instead?"); // He желаете ли взамен фондовые опционы? break; case EmpType.Grunt: Console.WriteLine("You have got to be kidding..."); // Вы должно быть шутите... break; case EmpType.Contractor: Console.WriteLine("You already get enough cash..."); // Вы уже получаете вполне достаточно... break; case EmpType.VicePresident: Console.WriteLine("VERY GOOD, Sir!"); // Очень хорошо, сэр! break; }}Обратите внимание, что когда переменной
enumGruntEmpTypeEnumenumstatic void ThisMethodWillNotCompile(){ // Ошибка! SalesManager отсутствует в перечислении EmpTypeEnum! EmpTypeEnum emp = EmpType.SalesManager; // Ошибка! He указано имя EmpTypeEnum перед значением Grunt! emp = Grunt;}Использование типа System.Enum
С перечислениями .NET Core связан один интересный аспект — они получают свою функциональность от класса
System.EnumSystem.EnumEnum.GetUnderlyingType()System.ByteEmpTypeEnum- Предыдущая
- 89/642
- Следующая
