Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка ПИ Программирование на С# _Хотов.docx
Скачиваний:
12
Добавлен:
01.07.2025
Размер:
2 Мб
Скачать
☆
      1. Перечисления enum

Кроме примитивных типов данных в C# есть такой тип как enum или перечисление. Перечисления представляют набор логически связанных констант. Объявление перечисления происходит с помощью оператора enum. Далее идет название перечисления, после которого указывается тип перечисления - он обязательно должен представлять целочисленный тип (byte, int, short, long). Если тип явным образом не указан, то умолчанию используется тип int. Затем идет список элементов перечисления через запятую:

enum days

{

monday,

tuesday,

wednesday,

thursday,

friday,

saturday,

sunday

}

enum time : byte

{

morning,

afternoon,

evening,

night

}

В этих примерах каждому элементу перечисления присваивается целочисленное значение, причем первый элемент будет иметь значение 0, второй - 1 и так далее. Мы можем также явным образом указать значения элементов, либо указав значение первого элемента:

enum operation

{

add = 1, // каждый следующий элемент по умолчанию увеличивается на единицу

substract, // этот элемент равен 2

multiplay, // равен 3

divide // равен 4

}

Но можно и для всех элементов явным образом указать значения:

enum operation

{

add = 2,

substract = 4,

multiplay = 8,

divide = 16

}

Применим перечисления в реальной программе:

class Program

{

enum Operation

{

add = 1,

substract,

multiplay,

divide

}

static void MathOp(double x, double y, Operation op)

{

double result = 0.0;

switch (op)

{

case Operation.add:

result = x + y;

break;

case Operation.substract:

result = x - y;

break;

case Operation.multiplay:

result = x * y;

break;

case Operation.divide:

result = x / y;

break;

}

Console.WriteLine("Результат операции равен {0}", result);

}

static void Main(string[] args)

{

// Тип операции задаем с помощью константы Operation.add, которая равна 1

MathOp(10, 5, Operation.add);

// Тип операции задаем с помощью константы Operation.multiplay, которая равна 3

MathOp(11, 5, Operation.multiplay);

Console.ReadLine();

}

}

Здесь у нас имеется перечисление Operation, которое представляет арифметические операции. Также у нас определен метод MathOp, который в качестве параметров принимает два числа и типа операции. В основном методе Main мы два раза вызываем процедуру MathOp, передав в нее два числа и тип операции.

    1. Коллекции

      1. Введение в коллекции

Хотя в языке C# есть массивы, которые хранят в себе наборы однотипных объектов, но работать с ними не всегда удобно. Например, массив хранит фиксированное количество объектов, однако что если мы заранее не знаем, сколько нам потребуется объектов. И в этом случае намного удобнее применять коллекции. Еще один плюс коллекций состоит в том, что некоторые из них реализует стандартные структуры данных, например, стек, очередь, словарь, которые могут пригодиться для решения различных специальных задач.

Большая часть классов коллекций содержится в пространствах именSystem.Collections (простые необобщенные классы коллекций),System.Collections.Generic (обобщенные или типизированные классы коллекций) и System.Collections.Specialized (специальные классы коллекций). Также для обеспечения параллельного выполнения задач и многопоточного доступа применяются классы коллекций из пространства имен System.Collections.Concurrent

Основой для создания всех коллекций реализация интерфейсов IEnumerator и IEnumerable (и их обобщенных двойниковIEnumerator<T> и IEnumerable<T>). Интерфейс IEnumerator представляет перечислитель, с помощью становится возможен последовательный перебор коллекции, например, в цикле foreach. А интерфейс IEnumerable через свой метод GetEnumeratorпредоставляет перечислитель всем классам, реализующим данный интерфейс. Поэтому интерфейс IEnumerable (IEnumerable<T>) является базовым для всех коллекций.

Рассмотрим создание и применение двух коллекций:

using System;

using System.Collections;

using System.Collections.Generic;

namespace Collections

{

class Program

{

static void Main(string[] args)

{

// необобщенная коллекция ArrayList

ArrayList objectList = new ArrayList() { 1, 2, "string", 'c', 2.0f };

object obj = 45.8;

objectList.Add(obj);

objectList.Add("string2");

objectList.RemoveAt(0); // удаление первого элемента

foreach (object o in objectList)

{

Console.WriteLine(o);

}

Console.WriteLine("Общее число элементов коллекции: " + objectList.Count);

// обобщенная коллекция List

List<string> countries = new List<string>() { "Россия", "США", "Великобритания", "Китай" };

countries.Add("Франция");

countries.RemoveAt(1); // удаление второго элемента

foreach (string s in countries)

{

Console.WriteLine(s);

}

Console.ReadLine();

}

}

}

Здесь используются две коллекции: необобщенная - ArrayList и обобщенная - List. Большинство коллекций поддерживают добавление элементов. Например, в данном случае добавление производится методом Add, но для других коллекций название метода может отличаться. Также большинство коллекций реализуют удаление (в данном примере производится с помощью метода RemoveAt).

С помощью свойства Count у коллекций можно посмотреть количество элементов.

И так как коллекции реализуют интерфейс IEnumerable/IEnumerable<T>, то все они поддерживают перебор в цикле foreach.

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