Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | ||
|
Массивы – это ссылочные пользовательские типы. Объявление массива в C# схоже с объявлением переменной, но после указания типа размещается спецификатор размерности – пара квадратных скобок:
int[] data;
Массив является ссылочным типом, поэтому перед началом работы любой массив должен быть создан в памяти. Для этого используется конструктор в форме new тип[количество-элементов].
int[] data;
data = new int[10];
Создание массива можно совместить с его объявлением:
int[] data = new int[10];
Созданный массив автоматически заполняется значениями по умолчанию для своего базового типа (ссылочные типы – null, числа – 0, тип bool – false).
Для доступа к элементу массива указывается имя массива и индекс в квадратных скобках: data[0] = 10. Индекс массива должен неявно приводиться к типам int, uint, long или ulong. Элементы массива нумеруются с нуля, в C# не предусмотрено синтаксических конструкций для указания особого значения нижней границы массива. При выходе индекса массива за допустимый диапазон генерируется исключительная ситуация.
В C# существует способ задания всех элементов массива при создании. Для этого используется список значений в фигурных скобках. При этом можно не указывать количество элементов, а также полностью опустить указание на тип и ключевое слово new:
int[] data_1 = new int[4] {1, 2, 3, 5};
int[] data_2 = new int[] {1, 2, 3, 5};
int[] data_3 = new[] {1, 2, 3, 5};
int[] data_4 = {1, 2, 3, 5};
Первые три примера инициализации допускают указание вместо типа переменной ключевого слова var (например, var data_3 = new[] {1, 2, 3, 5}). Компилятор вычислит тип массива автоматически.
При необходимости можно объявить массивы, имеющие несколько размерностей. Для этого в спецификаторе размерности помещают запятые, «разделяющие» размерности:
// двумерный массив d
int[,] d;
d = new int[10, 2];
// трёхмерный массив Cube
int[,,] Cube = new int[3, 2, 5];
// объявим двумерный массив и инициализируем его
int[,] c = new int[2, 4] {
{1, 2, 3, 4},
{10, 20, 30, 40}
};
// то же самое, но немного короче
int[,] c = {{1, 2, 3, 4}, {10, 20, 30, 40}};
В приведённых примерах объявлялись массивы из нескольких размерностей. Такие массивы всегда являются прямоугольными. Можно объявить массив массивов, используя следующий синтаксис[3]:
int[][] table; // table – массив одномерных массивов
table = new int[2][]; // в table будет 2 одномерных массива
table[0] = new int[2]; // в первом массиве будет 2 элемента
table[1] = new int[20]; // во втором – 20 элементов
table[1][3] = 1000; // работаем с элементами table
// совместим объявление и инициализацию массива массивов
int[][] t = {new[] {10, 20}, new[] {1, 2, 3}};
Язык CIL содержит специальные инструкции для работы с одномерными массивами, индексированными с нуля. Поэтому массив массивов обрабатывается немного быстрее, чем двумерный массив.
При работе с массивом можно использовать цикл foreach, перебирающий все элементы. В цикле foreach возможно перемещение по массиву в одном направлении – от начала к концу, при этом попытки присвоить значение элементу массива игнорируются. В следующем фрагменте кода производится суммирование элементов массива:
int[] data = {1, 3, 5, 7, 9};
var sum = 0;
foreach (var element in data)
{
sum += element;
}
В заключение рассмотрим вопрос о приведении типов массивов. Массивы ковариантны для ссылочных типов. Это означает следующее: если ссылочный тип A неявно приводим к ссылочному типу B, массив с элементами типа A может быть присвоен массиву с элементами типа B. При этом количество элементов в массиве роли не играет, но массивы должны иметь одинаковую размерность.
public class Student {... } // объявление класса
Student[] students = new Student[10];
object[] array = students; // ковариантность массивов
Все массивы в платформе.NET могут рассматриваться как классы, являющиеся потомками класса System.Array. Описание возможностей этого класса дано в разделе, рассказывающем о работе с коллекциями.
Классы
Класс является основным пользовательским типом. Синтаксис объявления класса в C# следующий:
модификаторы class имя-класса
{
[элементы-класса]
}
Дата публикования: 2015-11-01; Прочитано: 345 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!