Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Теоретический_курс.doc
Скачиваний:
36
Добавлен:
10.11.2019
Размер:
7.68 Mб
Скачать

3.8.3. Класс «Array» Класс «Array»

1. Класс «Array»

Каждый создаваемый массив в C# получает большую часть функциональности от класса System.Array. Общие члены этого класса позволяют работать с массивом с использованием полноценной объектной модели. Таким образом, методы и свойства, определённые в классе Array, можно использовать с любым массивом С#. Разберём некоторые полезные особенности класса Array.

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

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

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

namespace LC_Console

{

class Program

{

static void Main(string[] args)

{

// Создаем массив типа string, длиной 5

Array myArr = Array.CreateInstance(typeof(string), 5);

// Инициализируем первые два поля массива

myArr.SetValue("Имя", 0);

myArr.SetValue("Возраст", 1);

// Считываем данные из массива

string s = (string)myArr.GetValue(1);

Console.WriteLine(s);

// Выведет: Возраст

Console.WriteLine("\nДля продолжения нажмите любую клавишу . . .");

Console.ReadLine();

}

}

}

Обратим внимание, что для установки значений в массив служит метод SetValue, а для их чтения — метод GetValue.

3. Копирование массивов

Поскольку массивы — это ссылочные типы, присваивание переменной типа массива другой переменной создает две переменных, ссылающихся на один и тот же массив. Для копирования массивов предусмотрена реализация массивами интерфейса ICloneable. Метод Clone, определённый в этом интерфейсе, создает неглубокую копию массива. Если элементы массива относятся к типу значений, то все они копируются, если массив содержит элементы ссылочных типов, то сами эти элементы не копируются, а копируются лишь ссылки на них.

Вместо метода Clone можно также применять метод Array.Сору, тоже создающий поверхностную копию. Но между Clone и Сору есть одно важное отличие: Clone создаёт новый массив, а Сору требует наличия существующего массива той же размерности с достаточным количеством элементов. Пример:

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

namespace LC_Console

{

class Program

{

static void Main(string[] args)

{

string[] arr2 = new string[5];

// Создаем массив типа string, длиной 5

Array myArr = Array.CreateInstance(typeof(string),5);

// Инициализируем первые три поля массива

myArr.SetValue("Имя", 0);

myArr.SetValue("Возраст", 1);

myArr.SetValue("Адрес", 2);

// Копируем массив с помощью метода "Clone"

string[] arr1 = (string[])myArr.Clone();

foreach (string s in arr1)

Console.Write("\t"+s);

// Копируем с помощью метода "Copy"

Console.WriteLine();

Array.Copy(myArr, arr2, myArr.Length);

foreach (string s in arr2)

Console.Write("\t"+s);

Console.WriteLine("\nДля продолжения нажмите любую клавишу . . . ");

Console.ReadLine();

}

}

}

/* Выведет:

* Имя Возраст Адрес

* Имя Возраст Адрес

* Для продолжения нажмите любую клавишу . . .

*/