C# → Сложные типы

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

Делегаты – это типы, которые ссылаются на методы. Они похожи на указатели функций в С++, но разрешают создавать экземпляр класса и вызывать как статические методы класса, так и методы конкретного экземпляра класса. Делегаты позволяют во время исполнения определять, какой метод из указанного набора необходимо вызвать.

Структура имеет тип по значению. Для инициализации структуры используется оператор new. Структура инициализируется (0) сразу после своего объявления. Компилятор не позволяет копировать одну структуру в другую до ее инициализации.

public struct Subscriber
{
    public string Name;
    public decimal Balance;
}                  …
Subscriber myStuct1 = new Subscriber();
myStuct1.Name = "Admin";
myStuct1.Balance = 100.20m;
Subscriber myStruct2 = myStuct1;

Перечисление:  public enum Users : byte { Admin = 0, User = 1, Staff = 3 }

В C# массив – отдельный объект.

При создании массива можно воспользоваться следующим кодом:

int Len;    // переменная, которая будет содержать размер масива
Len = 10;   // установим длину масива в 10
int[] Integers; // объявляем масив значений типа int (пока нулевая ссылка)
Integers = new int[Len];  // непосредственно создаем в куче масив длиной Len

Тем не менее, для определения массива, длина которого задается динамически, или массив, который может быть увеличен во время выполнения программы, придется использовать экземпляр объекта ArrayList (System.Collections).

Метод Length массива возвращает его длину (количество элементов):

string[] Strings = { "A", "B", "C", "D", "E", "F" };
int Len = Strings.Length;
Console.WriteLine(Len);
for (int i = 0; i < Len; i++){ 
    Console.Write(" " + Strings[i]); 
}

GetLength() – позволяет получить длину каждого измерения многомерного массива.

Для сортировки в возрастающем порядке однотипного массива можно воспользоваться статическим методом Array.Sort(<имя_масива>) класса Array.

// определяем масив пользователей
string[] Users = { "user1", "admin", "slava", "HSD", "пользователь1", 
"Пользователь2", "Ящик", "Абетка"};
// сортируем элементы массива в алфафитном порядке
Array.Sort(Users);
// меняем порядок следования элементов списка
Array.Reverse(Users);
// выводим на экран масив
for (int i = 0; i < Users.Length; i++) { Console.Write("\n " + Users[i]);s }

Многомерные массивы бывают двух видов: прямоугольные (в каждой строке одинаковое число столбцов):  int[,] Integer; Integer = new int[25,25];

Неровные (отрогональные массивы) – каждый ряд содержит разное число столбцов.