Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекция10.doc
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
470.53 Кб
Скачать

Лекция №10 Тема: Перечисление, массивы и коллекции. Отношения между классами. Клиенты и наследники

Перечисления (enumerations) - целочисленные типы, которые определяет пользователь. При объявлении перечислений вы специфицируете набор допустимых значений, которые могут принимать экземпляры перечислений. Кроме того нужно присвоить значениям интуитивно понятные имена.

В дальнейшей работе перечисления могут сыграть очень важную роль и облегчить жизнь программисту. Объявляются перечисления вот так:

public enum DaysOfWeek

{

Monday = 0,

Tuesday = 1,

Wednesday = 2,

Thursday = 3,

Friday = 4,

Saturday = 5,

Sunday = 6

}

Здесь мы используем целые значения, которые соответствуют дням недели (стоит отметить что день можно определить из названия переменной) Доступ к конкретному дню недели можно получить вот так: DaysOfWeek.Wednesday вернет 2. Обычно перечисления используют в тех случаях, когда нужно передавать соответствующее значение методу, который будет проходить по всем значениям спомощью switch и выдавать соответствующий результат.

Перечисление - это частный случай класса, класс, заданный без собственных методов. Перечисление задает конечное множество возможных значений, которые могут получать объекты класса перечисление. Поскольку у перечислений нет собственных методов, то синтаксис объявления этого класса упрощается - остается обычный заголовок и тело класса, содержащее список возможных значений. Вот формальное определение синтаксиса перечислений:

[атрибуты][модификаторы]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};

Вот несколько моментов, на которые следует обратить внимание при объявлении перечислений:

  • как и другие классы, перечисления могут быть объявлены непосредственно в пространстве имен проекта или могут быть вложены в описание класса. Последний вариант часто применяется, когда перечисление используется в одном классе и имеет атрибут доступа private;

  • константы разных перечислений могут совпадать, как в перечислениях MyColors и TwoColors. Имя константы всегда уточняется именем перечисления;

  • константы могут задаваться словами русского языка, как в перечислении Rainbow;

  • разрешается задавать базовый класс перечисления. Для перечисления Days базовым классом задан класс long;

  • разрешается задавать не только базовый класс, но и указывать начальный элемент подмножества, на которое проецируется множество значений перечисления. Для перечисления Sex в качестве базового класса выбран класс byte, а подмножество значений начинается с 1, так что хранимым значением константы man является 1, а woman - 2.

В .NET Framework существует множество классов коллекций (collection), позволяющих легко решить вопросы с добавлением и удалением элементов массива. Чаще всего используется коллекция List<T>.

List<T> позволяет легко добавить, удалить, выбрать элемент и даже поменять порядок следования элементов.

1) Создания нового экземпляра List<T> Коллекции, как и массивы, принадлежат к определенному типу. Тип объектов или значений, которые должны там храниться, указывается в момент создания коллекции в угловых скобках о с помощью оператора new.

2) Добавление в коллекцию List<T> В коллекцию List<T> можно добавить произвольное количество элементов (главное, чтобы они были полиморфны с типом указанным при создании List<T>.

Клаcc List встроен в .NET Framework и позволяет делать вещи, о которых вы не могли даже мечтать, имея в арсенале только старые добрые массивы.

Перечислим новые возможности:

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]