Пред.
След.
Макеты страниц
Распознанный текст, спецсимволы и формулы могут содержать ошибки, поэтому с корректным вариантом рекомендуем ознакомиться на отсканированных изображениях учебника выше Также, советуем воспользоваться поиском по сайту, мы уверены, что вы сможете найти больше информации по нужной Вам тематике ДЛЯ СТУДЕНТОВ И ШКОЛЬНИКОВ ЕСТЬ
ZADANIA.TO
7.5. Класс ArrayНельзя понять многие детали работы с массивами в C#, если не знать устройство класса Array из библиотеки FCL, потомками которого являются все классы-массивы.
Рассмотрим следующие объявления: //Класс Array
У всех классов, являющихся массивами, много общего, поскольку все они являются потомками класса System.Array. Класс System.Array наследует ряд интерфейсов: ICloneable, IList, ICollection, Enumerable, и обязан реализовать все их методы и свойства. Помимо наследования свойств и методов класса Object и вышеперечисленных интерфейсов, класс Array имеет довольно большое число собственных методов и свойств. Взгляните, как выглядит отношение наследования на семействе классов, определяющих массивы (рис. 24). Благодаря такому мощному родителю (класс Object), над массивами определены самые разнообразные операции - копирование, поиск, обращение, сортировка, получение различных характеристик. Массивы можно рассматривать как коллекции и устраивать циклы ForEach для перебора всех элементов. Важно и то, что когда у семейства классов есть общий родитель, то можно иметь общие процедуры обработки различных потомков этого родителя. Для общих процедур работы с массивами характерно, что один или несколько формальных аргументов имеют родительский тип Array. Естественно, внутри такой процедуры может понадобиться анализ - какой реальный тип массива передан в процедуру.
Рисунок 24. Отношение наследования на классах-массивах Рассмотрим пример подобной процедуры. Ранее для печати элементов массива использовались различные процедуры PrintAr1, PrintAr2 и так далее, по одной для каждого класса массива. Теперь приведем общую процедуру, формальный аргумент которой будет принадлежать родителю всех классов- массивов, что позволит передавать массив любого класса в качестве фактического аргумента: public
void PrintAr(string name, Array A) {
Вот как выглядит создание массивов и вызов процедуры печати: public void CreateTwoDimAr(int[,] A) {
Вот результаты вывода массивов ar1, ar2 и ar3 (рис. 25).
Рисунок 25. Печать массивов. Результаты работы процедуры PrintAr Приведем некоторые комментарии. Первое, на что следует обратить внимание: формальный аргумент процедуры принадлежит базовому классу Array, наследниками которого являются все массивы в CLR и, естественно, все массивы C#. Для того чтобы сохранить возможность работы с индексами, как в одномерном, так и в двумерном случае, пришлось организовать разбор случаев. Свойство Rank, возвращающее размерность массива, используется в этом разборе. К элементам массива A, имеющего класс Array, нет возможности прямого доступа в обычной манере - A [<индексы>], но зато есть специальные методы GetValue (<индексы>) и SetValue (<индексы>). Естественно, разбор случаев можно продолжить, придав процедуре большую функциональность. Отметим, если разбор случаев вообще не делать, а использовать PrintAr только для печати одномерных массивов, то она будет столь же проста, как и процедура PrintAr1, но сможет печатать любые одномерные массивы, независимо от типа их элементов. Свойства класса Array Основные свойства класса Array приведены в таблице 3. При работе с массивом его можно закрыть на время обработки (для чего используется соответствующее свойство SyncRoot), что запрещает его модификацию каким-либо потоком: Array myCol = new
int[ ];
Остальные представленные свойства не требуют особых комментариев. Таблица 3. Свойства класса Array
Статические методы класса Array Статические методы класса Array позволяют решать самые разнообразные задачи: • Copy - позволяет копировать весь массив или его часть в другой массив. •IndexOf, LastIndexOf - определяют индексы первого и последнего вхождения образца в массив, возвращая -1, если такового вхождения не обнаружено. •Reverse - выполняет обращение одномерного массива, переставляя элементы в обратном порядке. •Sort - осуществляет сортировку массива. •BinarySearch - определяет индекс первого вхождения образца в отсортированный массив, используя алгоритм двоичного поиска. •Clear - выполняет начальную инициализацию элементов. В зависимости от типа элементов устанавливает значение 0 для арифметического типа, false - для логического типа, Null для ссылок, "" - для строк. •CreateInstance - создание экземпляров класса. Класс Array, в отличие от многих классов, может создавать свои экземпляры не только с помощью конструктора new, но и при вызове метода CreateInstance: Array my2Dar = Array.CreateInstance(typeof(double), 2,2) Все методы перегружены и имеют ряд модификаций. Большинство из этих методов применимо только к одномерным массивам. Динамические методы класса Array Динамические методы класса Array представлены таблицей 4. Таблица 4. Динамические методы класса Array
|
1 |
Оглавление
|