Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Заочники_АСОИ / Лекции / 02 Массивы и кортежи / Массивы, кортежи, перечисления.docx
Скачиваний:
27
Добавлен:
29.02.2016
Размер:
110.14 Кб
Скачать

Класс Array

Объявление массива с квадратными скобками  это нотация C# для использования класса Array. Такой синтаксис C# приводит к созданию “за кулисами” нового класса, унас­ледованного от абстрактного базового класса Array. Таким образом, методы и свойства, определенные в классе Array, можно использовать с любым массивом С#. Например, вы уже применяли свойство Length и итерацию по элементам с помощью оператора foreach. В этом случае используется метод GetEnumerator() класса Array.

В классе Array реализованы и другие свойства: LongLength для массивов, в которых количество элементов не помещается в обычное, целое, и Rank для получения количества измерений. Давайте взглянем на другие члены класса Array, попробовав поддерживаемые им возможности.

Создание массивов

Класс Array является абстрактным, поэтому создать массив с использованием како­го-либо конструктора нельзя. Однако вместо применения синтаксиса C# для создания экземпляров массивов также возможно создавать их с помощью статического метода Createlnstance (). Это исключительно удобно, когда заранее не известен тип элементов массива, поскольку тип можно передать методу Createlnstance() в параметре как объ­ект Туре.

В следующем примере демонстрируется создание массива типа int размером 5. Первый аргумент метода Createlnstance() требует тип элементов, а второй определяет размер. Для установки значений служит метод SetValue(), а для их чтения  метод GetValue().

Array intArray1 = Array.Createlnstance (typeof (int), 5) ;

for (int i = 0;- i < 5; i++)

{

intArray1.SetValue(33, i);

}

for (int i = 0; i < 5; i++)

{

Console.WriteLine(intArray1.GetValue(i));

}

Созданный массив можно также привести к типу массива, объявленного как int[]:

int[] intArray2 = (int[])intArray1;

Метод Createlnstance() имеет множество перегрузок для создания многомерных мас­сивов, а также для создания массивов с индексацией, не начинающейся с 0. В следующем примере создается двумерный массив размером 2x3 элемента. Базой первого измерения является 1, а второго  10.

int[] lengths = {2, 3};

int[] lowerBounds = {1, 10};

Array racers = Array.Createlnstance(typeof(Person), lengths,

lowerBounds);

Метод SetValue() , устанавливающий элементы массива, принимает индексы каждого измерения:

racers.SetValue (new Person

{

FirstName = "Alain",

LastName = "Prost"

}, 1, 10);

racers.SetValue(new Person

{

FirstName = "Emerson",

LastName = "Fittipaldi"

}, 1, 11);

racers.SetValue(new Person {

FirstName = "Ayrton",

LastName = "Senna"

}, 1, 12);

racers.SetValue(new Person

{

FirstName = "Ralf",

LastName = "Schumacher"

), 2, 10);

racers.SetValue(new Person

{

FirstName = "Fernando",

LastName = "Alonso"

}, 2, 11);

racers.SetValue(new Person

{

FirstName = "Jenson",

LastName = "Button"

}, 2, 12);

Хотя массив не базируется на 0, его можно присваивать переменной в обычной нота­ции С#. Следует лишь обращать внимание на то, чтобы не выходить за границы индексов:

Person[,] racers2 = (Person[,])racers;

Person first = racers2[l, 10];

Person last = racers2[2, 12];