Ответ
В C# массив — это объект типа System.Array, хранящий элементы одного типа в непрерывном блоке памяти управляемой кучи (heap). Даже массивы типов-значений (value types) являются ссылочными объектами.
Ключевые особенности реализации:
- Фиксированный размер: Количество элементов задаётся при создании и не может быть изменено.
- Индексация с нуля: Доступ к элементам осуществляется по целочисленному индексу, начиная с 0.
- Контроль границ: При каждом обращении по индексу выполняется проверка выхода за границы массива (Bounds Checking), что предотвращает повреждение памяти.
- Ковариантность: Массивы ссылочных типов ковариантны (например,
string[]может быть присвоен переменной типаobject[]), но это небезопасная операция с точки зрения типов.
Примеры создания и использования:
// Одномерный массив
int[] numbers = new int[5]; // Создание массива из 5 целых чисел (инициализированных 0)
numbers[0] = 10;
int firstElement = numbers[0];
// Инициализация при объявлении
string[] colors = { "Red", "Green", "Blue" };
// Многомерный (прямоугольный) массив
int[,] matrix = new int[2, 3]; // 2 строки, 3 столбца
matrix[1, 2] = 5;
// Ступенчатый (jagged) массив — массив массивов
int[][] jaggedArray = new int[3][];
jaggedArray[0] = new int[] { 1, 2 };
jaggedArray[1] = new int[] { 3, 4, 5 };
Под капотом: Массив хранит служебную информацию (указатель на тип, длину, ранк) и непосредственно за ней — элементы. Для типов-значений элементы хранятся "встроенно", для ссылочных типов хранятся ссылки на объекты.