Раздел 2. Часть 2.
Использование библиотеки классов .NET Framework (Visual C#).
Array – класс
Предоставляет методы для создания, изменения, поиска и сортировки массивов, то есть выступает в роли базового класса для всех массивов в среде CLR. Явно наследовать класс Array может только система и компиляторы. Пространство имен: System.
public abstract class Array Member of System
Модификатор abstract может использоваться с классами, методами, свойствами, индексаторами и событиями. Модификатор abstract в объявлении класса указывает, что класс предназначен только для использования в качестве базового класса для других классов. Создавать экземпляры абстрактного класса нельзя. Конструктора нет. Создавать переменные типа Array можно. Метод CreateInstance, используется вместо открытых конструкторов. Пример
static void Main(string[] args)
{
Array myArr = Array.CreateInstance(typeof(Int32), 3);
foreach (int i in myArr)
{
Console.Write("\t{0}", i);
}
Console.WriteLine();
myArr.SetValue(1, 1);
foreach (int i in myArr)
{
Console.Write("\t{0}", i);
}
}

Следующий код приведет к ошибке
Array myArr = Array.CreateInstance(typeof(Int32), 3);
myArr[1] = 8;
foreach (int i in myArr)
{
Console.Write("\t{0}", i);
}
Ошибка 1 Невозможно применить индексирование через [] к выражению типа "System.Array"
Следующий код не приведет к ошибке
int[] myArr = new int[3] { 11, 12, 13 };
myArr[1]=99;
foreach (int i in myArr)
{
Console.Write("\t{0}", i);
}
Console.WriteLine();
Массивы являются ссылочными типами, производными от абстрактного базового типа Array.
static void Main(string[] args)
{
int[] myArr = new int[3] {11,12,13 };
myArr.SetValue(88, 1);
foreach (int i in myArr)
{
Console.Write("\t{0}", i);
}
Console.WriteLine();
}
В C# во всех массивах можно использовать итерацию foreach.
Неабстрактный тип, являющийся производным от абстрактного, содержит фактические реализации всех наследуемых абстрактных методов и методов доступа.
ArrayList - класс
Интерфейс IList представляет неуниверсальную коллекцию объектов с индивидуальным доступом, осуществляемым при помощи индекса.
Пространство имен: System.Collections Список IList с переменным размером позволяет выполнять добавление, удаление и изменение элементов. Доступ к элементам этой коллекции осуществляется с помощью целочисленного индекса. Индексы в этой коллекции начинаются с нуля. Конструктор есть.
Пример создания и инициализации
using System;
using System.Collections;
namespace ConsoleApplication2
{
class Program
{
static void Main(string[] args)
{
ArrayList myAL = new ArrayList();
myAL.Add("Hello");
myAL.Add("World");
myAL.Add("!");
Console.WriteLine(" Count: {0}", myAL.Count);
Console.WriteLine(" Capacity: {0}", myAL.Capacity);
myAL[1] = "??????????";
foreach (Object obj in myAL)
Console.Write(" {0}", obj);
Console.WriteLine();
}
}
}
Пример
using System;
using System.Collections;
namespace ConsoleApplication2
{
class Class1
{
int s;
int a;
public Class1(int s, int a)
{
this.s = s;
this.a = a;
}
public override string ToString()
{
return String.Format("{0} {1}", s, a);
}
}
class Program
{
static void Main(string[] args)
{
Class1[] g = new Class1[3];
g[0] = new Class1(1, 4);
g[1] = new Class1(2, 8);
g[2] = new Class1(5, 4);
foreach (Class1 i in g)
Console.WriteLine(i);
ArrayList a = new ArrayList();
a.Add(new Class1(2, 4));
a.Add(new Class1(4, 17));
a.Add(new Class1(3, 8));
for (int i = 0; i < a.Count; i++)
Console.WriteLine("{0:d}", a[i]);
}
}
}
Пример. Используя метод Array.Sort отсортировать массив. Настроить порядок сортировки массива.
using System;
using System.Collections;
namespace ConsoleApplication5
{
class Program : IComparer
{
int IComparer.Compare(Object x, Object y)
{
int x1 = (int)x;
int y1 = (int)y;
return y1.CompareTo(x1);
}
static void Main(string[] args)
{
Program g = new Program();
int[] a = new int[7] { 2, 5, 1, 7, 9, 4, 3 };
IComparer mm = new Program();
Array.Sort(a, mm);
for (int i = 0; i < a.Length; i++)
Console.WriteLine("{0:d}", a[i]);
}
}
}
