Урок по C# №11: «Перечисления и многомерные массивы»


Этот урок завершает первую часть изучения C#. Вы должны уже знать базовый синтаксис языка и основные конструкции, чтобы изучать следующий уровень. Я сознательно разбил серию уроков по C# на несколько частей, стремясь идти от простейшего к сложному.

В следующей части мы изучим с вами ООП и приступим к разработке Windows приложений. Там уже будет все значительно интереснее, что скажется на понимании изложенного материала.  Мы также изучим с вами программирование для интернета, базы данных, игрописание с XNA и в качестве бонуса я научу вас писать торговых роботов для фондовых рынков.  Думаю, план вам понятен.

Итак, наберите воздуха в грудь и быстренько пробежите глазами по этому уроку. Уверяю, ничего сложно в нем нет. Он просто содержит те части материала, которые я логически не смог втиснуть в предыдущие уроки. После этого урока я рекомендую вам пройти небольшой практикум по языку C#.

Перечисления

Помните, я рассказывал вам о константах? Они хранят постоянное значение в программе все время ее выполнения. Однако в мало-мальски сложных программах (а это почти все, что отлично от «Hello World!») часто возникает потребность в неком наборе таких констант. Причем, желательно, чтобы они были логически объединены в некую структуру данных с одним именем. Вспомните массивы. Ведь как удобно было обращаться к элементу массива по его индексу.

В C# есть подобная структура и называется она перечисления (enum) . Давайте теперь рассмотрим, для чего нужны эти самые перечисления. Аналогию я буду проводить с .Netовской библиотекой.

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

Конечно, нагляднее привести пример с обычными приложениями Windows, ноя решил оставить их на вторую часть. В конце-концов, использование библиотечных контролов просто до безобразия.

Итак, вернемся к нашей задаче о программе, в которой нужно будет поменять цвет (шрифт, фон и т.д.). Наверняка вы хотели бы несколько упростить задачу пользователю. Например, как известно, цвет задается значениями красного, зеленого и синего цветов. Причем, шкала цвета идет от 0 до 255. Сказать по правде, лично я не могу подобрать  по этим комбинациям нужный мне цвет. Мне даже пришлось написать небольшую программку, которая выводит числовое значение выбранного на экране цвета. 🙂

Поэтому мы можем создать константы с нужным цветом и выбирать уже из них. Например, создать константу Green и задать ей шестнадцатиричное  значение цвета (от 1 до 255).  Таким же образом можно создать константы Blue, Yellow, Red. Purple и т.д. В принципе, с поставленной задачей мы бы справились подобным образом. Однако не кажется ли вам, что гораздо удобнее было бы засунть эти константы в некое множество, из которого можно было бы выбирать нужный нам цвет (или что-то, что взбредет нам в голову). C# позволяет нам это сделать, используя специальную структуру под названием перечисления (enum). Программистам С и С++ перечисления знакомы. В Паскале тоже есть перечисления, только там они называются наборы. В любом случае, сымсл тот же самый.

К сожалению, я выбрал не совсем удачный пример с цветом, так как дотнетовские библиотеки уже включат в себя  перечисления цвета. Например, свойство объекта Console BackgroundColor принимает значение из перечисления ConsoleColor. И таких примеров можно привести массу.

Тем не менее, нам важно научиться создавать свои перечисления. Давайте создадим перечисление цвета. Синтаксис перечисления такой:

enum  Имя_перечисления  {значение 1,значение 2 и т.д.};

Важно понимать, что значение перечисления можно задавать при объявлении (хотя и не обязательно). Например, давайте создадим перечисление ConsColor, в котором одному из значений зададим код цвета:


enum ConsColor

{ Red,

Green=120,

Blue,

Yellow,

Purple

};

Как видите, я задал явно 120 значению Green. Теперь C# будет считать, что этому значению соответствует 120. В остальных же случаях будут просто строковые константы.

Думаю,  что с этим вы разобрались. Более подробно о применении перечислений я расскажу в других уроках.

Для того, чтобы использовать перечисление, нужно объявить переменную его типа:


ConsColor color;

Теперь через точку мы можем  получить значение перечисления:


color.Red;

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

Если вы не совсем поняли о перечислениях, то советую почитать мой урок по C++ (дело в том, что там я писал все гораздо более развернуто, так как тот курс был расчитан на моего напарника-ученика, поэтому я часто ссылаюсь на него). Пока с перечислениями все.

Многомерные массивы

В предыдущем уроке я упомянул, что массивы бывают и многомерными. Самым популярным из них является двумерный массив. По сути, это просто таблица, в ячейках которой находится то или иное значение:

3

8

2

1

5

9

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

Объявляется многомерный массив так:

тип_массива [,] имя массива=new тип_массива [размер,размер]; //это двумерный массив

Трехмерный массив создается уже так:

тип_массива [ , ,] имя_массива=new тип_массива [размер1,размер2,размер3];

Ну и так далее. Обращаться к элементам многомерного массива нужно указывая сначала номер строки (это первый размер), а потом уже номер столбца:


Arr [2,5]=25; //присвоили пятому элементу второй строки массива значение 25.

Если вам не понятно, вспомните школьную арифметику. Вы искали там в таблице умножения по перекрестью нужных чисел. Здесь принцип тот же самый. Давайте в качестве закрепления материала напишем программу, которая заполняет двумерный массив числами из таблицы умножения:


int[,] table = new int[9, 9]; //создали массив 9 на 9

for (int i=0; i<9;i++)
for (int j = 0; j < 9; j++) //обходим столбцы

{

table[i, j] = i * j; //перемножаем индексы

}

Все, наша задача решена. Пробежитесь глазами по участку кода. Если вам нужно обработать подобным образом некоторую таблицу, то делается это двумя циклами –внешним и внутренним (вложенным). Внешний цикл проходит по строке, внутренний – по столбцам.

В принципе, на этом можно считать элементарную часть по C# оконченной. В следующем занятии вы выполните небольшой практикум, а потом уже приступим к изучению ООП в C#.

<< Предыдущий урок                                      Следующий урок>>

Яндекс.Метрика