Массивы
Value Type и Reference Type. Два типа массивов
Рассмотрим следующее объявление:
MyType[] myArray = new MyType[10];
Результат выполнения этого оператора зависит от того, что собой представляет тип MyType.
Возможны всего два варианта: MyType может быть типом-значением или типом-ссылкой.
Если это тип-значение, результатом выполнения оператора будет массив, содержащий 10 объектов MyType с предопределенными значениями.
Если MyType является ссылочным типом, то в результате выполнения данного оператора будет создан массив из 10 элементов типа "ссылка", каждый из которых будет проинициализирован пустой ссылкой – значением null.
Доступ к элементам массива реализуется в соответствии с правилом индексации – по каждому измерению индексация осуществляется с НУЛЯ до n–1, где n – количество элементов размерности.
Встроенный сервис по обслуживанию простых массивов
При работе с массивами следует иметь в виду одно важное обстоятельство.
В .NET ВСЕ массивы происходят от ОДНОГО общего (базового) класса Array. Это означает, что ВСЕ созданные в программе массивы обеспечиваются специальным набором методов для создания, управления, поиска и сортировки элементов массива. К числу таких методов и свойств, в частности, относятся следующие свойства:
public int Length {get;}
Возвращает целое число, представляющее общее количество элементов во всех измерениях массива.
public int Rank {get;}
Возвращает целое число, представляющее количество измерений массива.
И методы:
public static Array CreateInstance(Type, int, int);
Статический метод (один из вариантов), создает массив элементов заданного типа и определенной размерности:
public int GetLength (int dimension);
Возвращает количество элементов заданной параметром размерности:
public void SetValue(object, int, int);
Присваивает элементу массива значение, представленное первым параметром (один из вариантов):
public object GetValue(int, int);
Извлекает значение из двумерного массива по индексам (один из вариантов):
using System; public class DemoArray { public static void Main() { // Создали и проинициализировали двумерный массив строк. Array myArray=Array.CreateInstance( typeof(String), 2, 4 ); myArray.SetValue( "Вышел ", 0, 0 ); myArray.SetValue( "Месяц, ", 0, 1 ); myArray.SetValue( "из", 0, 2 ); myArray.SetValue( "тумана,", 0, 3 ); myArray.SetValue( "вынул", 1, 0 ); myArray.SetValue( "ножик", 1, 1 ); myArray.SetValue( "из", 1, 2 ); myArray.SetValue( "кармана.", 1, 3 ); // Показали содержимое массива. Console.WriteLine( "The Array contains the following values:" ); for ( int i = myArray.GetLowerBound(0); i <= myArray.GetUpperBound(0); i++ ) for ( int j = myArray.GetLowerBound(1); j <= myArray.GetUpperBound(1); j++ ) Console.WriteLine( "\t[{0},{1}]:\t{2}", i, j, myArray.GetValue( i, j ) ); } }
Элементы массива массивов (jagged array) на одном и том же уровне могут иметь разные размеры. На этих массивах функция GetLength() и свойство Rank показывают результаты, аналогичные простым одномерным массивам.