Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Перечисления
Перечисление - это частный случай класса, класс, заданный без собственных методов. Перечисление задает конечное множество возможных значений, которые могут получать объекты класса перечисление. Поскольку у перечислений нет собственных методов, то синтаксис объявления этого класса упрощается - остается обычный заголовок и тело класса, содержащее список возможных значений. Вот формальное определение синтаксиса перечислений: [атрибуты][модификаторы]enum имя_перечисления[: базовый класс]{список_возможных_значений}Описание атрибутов отложим на последующие лекции. Модификаторами могут быть четыре известных модификатора доступа и модификатор new. Ключевое слов enum говорит, что определяется частный случай класса - перечисление. Список возможных значений задает те значения, которые могут получать объекты этого класса. Возможные значения должны быть идентификаторами; но допускаются в их написании и буквы русского алфавита. Можно указать также базовый для перечисления класс. Дело в том, что значения, заданные списком, проецируются на плотное подмножество базового класса. Реально значения объектов перечисления в памяти задаются значениями базового класса, так же, как значения класса bool реально представлены в памяти нулем и единицей, а не константами true и false, удобными для их использования программистами в тексте программ. По умолчанию, базовым классом является класс int, а подмножество проекции начинается с нуля. Но при желании можно изменить интервал представления и сам базовый класс. Естественно, на базовый класс накладывается ограничение. Он должен быть одним из встроенных классов, задающих счетное множество (int, byte, long, другие счетные типы). Единственное исключение из этого правила - нельзя выбирать класс char в качестве базового класса. Как правило, принятый по умолчанию выбор базового класса и его подмножества вполне приемлем в большинстве ситуаций. Приведу примеры объявлений классов-перечислений: public enum Profession{teacher, engineer, businessman}; public enum MyColors {red, blue, yellow, black, white}; public enum TwoColors {black, white}; public enum Rainbow {красный, оранжевый, желтый, зеленый, голубой, синий, фиолетовый}; public enum Sex: byte {man=1, woman}; public enum Days: long {Sun, Mon, Tue, Wed, Thu, Fri, Sat};Вот несколько моментов, на которые следует обратить внимание при объявлении перечислений:
Рассмотрим теперь пример работы с объектами - экземплярами различных перечислений: public void TestEnum(){ //MyColors color1 = new MyColors(MyColors.blue); MyColors color1= MyColors.white; TwoColors color2; color2 = TwoColors.white; //if(color1! = color2) color2 = color1; if(color1.ToString()! = color2.ToString()) Console.WriteLine (" Цвета разные: {0}, {1}", color1, color2); else Console.WriteLine(" Цвета одинаковые: {0}, {1}", color1, color2); Rainbow color3; color3 = (Rainbow)3; if (color3! = Rainbow.красный)color3 =Rainbow.красный; int num = (int)color3; Sex who = Sex.man; Days first_work_day = (Days)(long)1; Console.WriteLine (" color1={0}, color2={1}, color3={2}", color1, color2, color3); Console.WriteLine (" who={0}, first_work_day={1}", who, first_work_day); }Данный пример иллюстрирует следующие особенности работы с объектами перечислений:
|